Что нового

[Массивы] Массив массивов. Не могу присвоить значение элементу вложенного массив

tarhitay

Новичок
Сообщения
18
Репутация
0
Код:
#include<Array.au3>

 $d=0

 Global $loc_1[3]=[0,1,2]
 Global $loc_2[4]=[0,2,1,7]
 Global $loc_3[3]=[0,3,4]
 Global $loc_4[4]=[0,4,3,5]
 Global $loc_5[5]=[0,5,4,6,21]
 Global $loc_6[5]=[0,6,5,20,7]
 Global $loc_7[5]=[0,7,6,2,19]
 Global $loc_8[3]=[0,8,41]
 Global $loc_9[2]=[0,9]
 Global $loc_10[3]=[0,10,11]
 Global $loc_11[4]=[0,11,10,12]
 Global $loc_12[4]=[0,12,11,13]
 Global $loc_13[6]=[0,13,12,15,16,17]
 Global $loc_14[4]=[0,14,15,27]
 Global $loc_15[4]=[0,15,14,13]
 Global $loc_16[3]=[0,16,13]
 Global $loc_17[6]=[0,17,13,18,25,46]
 Global $loc_18[6]=[0,18,19,24,17,45]
 Global $loc_19[5]=[0,19,7,23,18]
 Global $loc_20[3]=[0,20,6]
 Global $loc_21[5]=[0,21,5,22,23]
 Global $loc_22[3]=[0,22,21]
 Global $loc_23[5]=[0,23,21,19,45]
 Global $loc_24[3]=[0,24,18]
 Global $loc_25[4]=[0,25,26,17]
 Global $loc_26[5]=[0,26,28,25,27]
 Global $loc_27[4]=[0,27,14,26]
 Global $loc_28[5]=[0,28,26,49,29]
 Global $loc_29[3]=[0,29,28]
 Global $loc_30[3]=[0,30,31]
 Global $loc_31[5]=[0,31,40,32,30]
 Global $loc_32[5]=[0,32,8,31,38]
 Global $loc_33[4]=[0,33,34,35]
 Global $loc_34[3]=[0,34,33]
 Global $loc_35[5]=[0,35,47,33,32]
 Global $loc_36[3]=[0,36,38]
 Global $loc_37[4]=[0,37,38,36]
 Global $loc_38[4]=[0,38,47,37]
 Global $loc_39[3]=[0,39,40]
 Global $loc_40[5]=[0,40,31,41,39]
 Global $loc_41[5]=[0,41,8,40,44]
 Global $loc_42[3]=[0,42,43]
 Global $loc_43[4]=[0,43,42,44]
 Global $loc_44[6]=[0,44,47,5,43,41]
 Global $loc_45[5]=[0,45,23,18,47]
 Global $loc_46[4]=[0,46,17,47]
 Global $loc_47[7]=[0,47,46,45,35,44,38]


 Global $locations[47]=[$loc_1,$loc_2,$loc_3,$loc_4,$loc_5,$loc_6,$loc_7,$loc_8,$loc_9, _
						$loc_10,$loc_11,$loc_12,$loc_13,$loc_14,$loc_15,$loc_16,$loc_17,$loc_18,$loc_19, _
						$loc_20,$loc_21,$loc_22,$loc_23,$loc_24,$loc_25,$loc_26,$loc_27,$loc_28,$loc_29, _
						$loc_30,$loc_31,$loc_32,$loc_33,$loc_34,$loc_35,$loc_36,$loc_37,$loc_38,$loc_39, _
						$loc_40,$loc_41,$loc_42,$loc_43,$loc_44,$loc_45,$loc_46,$loc_47]

$d=$d+1 ;Должен работать в цикле, но для наглядности удалил все, кроме момента проблемы

$loc_1[0]=$d
MsgBox(0,"",$loc_1[0])    ;   Здесь все нормально, показывает "1"
MsgBox(0,"",($locations[0])[0])  ;А здесь уже не работает и показывает "0"

;;; При этом!!!!
MsgBox(0,"",($locations[0])[2])   ; Нормально показывает  "2".


То есть конструкция ($locations[0])[2] нормально отображает изначально заданные значения, но потом как будто существует отдельно.

Вот и вопрос. Как использовать правильно такую конструкцию, или может заменить как-то по другому???
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Это самый наиглупейший способ организации массива. Почему бы вам не создать двумерный массив с максимальным количеством строк, в данном случае 7:

Код:
Global $loc[47][7] = [[0, 1, 2], [0, 2, 1, 7], ... [0, 47, 46, 45, 35, 44, 38]]
 
Автор
T

tarhitay

Новичок
Сообщения
18
Репутация
0
Называть кого-нибудь глупцом - явно не признак интеллекта.

Есть функции которые в Вашем примере не заработают.
В моей программе количество циклов задается через функцию UBound($loc_X)

Поэтому использование двумерного массива не сработает.



Добавлено:
Сообщение автоматически объединено:

Данный кусок кода используется для работы алгоритма BFS.
Может кто-нибудь подскажет реализацию данного алгоритма для моих условий?

$loc_1[3](0,1,2) - первый элемент - это количество переходов от точки старта. 2-ой - собственный номер массива (или локации) 3-й элемент - куда можно осуществить переход.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
tarhitay сказал(а):
Называть кого-нибудь глупцом - явно не признак интеллекта.
Ткните пальцем, где я назвал кого-то (!) глупцом или я отправлю вас в баню!

tarhitay сказал(а):
Есть функции которые в Вашем примере не заработают.
Я вообще никаких функций не писал. Я просто показал вам правильный способ использования массива.

tarhitay сказал(а):
Данный кусок кода используется для работы алгоритма BFS...
Вот жеж !@#$%, вы так и будете открывать ребус по частям?
 
Автор
T

tarhitay

Новичок
Сообщения
18
Репутация
0
Это самый наиглупейший способ организации массива.

Да никаких ребусов.

Конкретный вопрос задал. Как организовать подобную конструкцию и почему моя не работает.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Не работает потому, что вы забыли, что массивы $loc и $locations не связаны между собой. На этапе инициализации массив $locations скопировал в себя все массивы $loc, и на этом вообщем-то все. Далее вы изменили нулевой массив $loc, но эти изменения никак не затронули массив $locations (две разные переменные).

Код:
$d += 1
$loc_1[0] = $d
$locations[0] = $loc_1


P.S

Но мой вам совет. Учитесь использовать возможности ЯП правильно. Если двумерный массив не вписывается в остальную часть программы, то я бы пересмотрел эту самую часть программы и постарался бы написать все по уму.
 
Автор
T

tarhitay

Новичок
Сообщения
18
Репутация
0
Спасибо за ответ. Тему считаю решенной.
Единственная просьба, кто-нибудь ткните в меня ссылкой на реализацию алгоритма BFS
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
tarhitay сказал(а):
Единственная просьба, кто-нибудь ткните в меня ссылкой на реализацию алгоритма BFS
Я поискал в сети, примеров и описания BFS целый вагон. У нас на форуме есть алгоритм Дейкстры.


Добавлено:
Сообщение автоматически объединено:

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Автор
T

tarhitay

Новичок
Сообщения
18
Репутация
0
Хорошо, что не проставил тему решенной.

($locations[2])[0]=1
после этого
($locations[2])[0] возвращает 0 (изначально там 0)

Вроде бы уже и не обращаюсь ни к какому другому массиву...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
($locations[2])[0]


Такая конструкция появилась в 3.3.10.0, и, как я понимаю, она не предусматривает запись данных. Используйте классический вариант.

Код:
$Temp = $locations[2]
$Temp[0] = 1
$locations[2] = $Temp
MsgBox(0,"",($locations[2])[0])
 
Верх