Автор Тема: [Массивы] Массив массивов. Не могу присвоить значение элементу вложенного массив  (Прочитано 1641 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн tarhitay [?]

  • Новичок
  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Код: AutoIt [Выделить]
#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] нормально отображает изначально заданные значения, но потом как будто существует отдельно.

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

Русское сообщество AutoIt


Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Это самый наиглупейший способ организации массива. Почему бы вам не создать двумерный массив с максимальным количеством строк, в данном случае 7:

Код: AutoIt [Выделить]
Global $loc[47][7] = [[0, 1, 2], [0, 2, 1, 7], ... [0, 47, 46, 45, 35, 44, 38]]



Думай, прежде чем говорить.

Оффлайн tarhitay [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Называть кого-нибудь глупцом - явно не признак интеллекта.

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

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



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

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



Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Называть кого-нибудь глупцом - явно не признак интеллекта.
Ткните пальцем, где я назвал кого-то (!) глупцом или я отправлю вас в баню!

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

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

Русское сообщество AutoIt


Оффлайн tarhitay [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Цитировать
Это самый наиглупейший способ организации массива.

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

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

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Не работает потому, что вы забыли, что массивы $loc и $locations не связаны между собой. На этапе инициализации массив $locations скопировал в себя все массивы $loc, и на этом вообщем-то все. Далее вы изменили нулевой массив $loc, но эти изменения никак не затронули массив $locations (две разные переменные).

Код: AutoIt [Выделить]
$d += 1
$loc_1[0] = $d
$locations[0] = $loc_1


P.S

Но мой вам совет. Учитесь использовать возможности ЯП правильно. Если двумерный массив не вписывается в остальную часть программы, то я бы пересмотрел эту самую часть программы и постарался бы написать все по уму.
« Последнее редактирование: Июль 25, 2015, 13:28:13 от Yashied »

Оффлайн tarhitay [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Спасибо за ответ. Тему считаю решенной.
Единственная просьба, кто-нибудь ткните в меня ссылкой на реализацию алгоритма BFS

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Единственная просьба, кто-нибудь ткните в меня ссылкой на реализацию алгоритма BFS
Я поискал в сети, примеров и описания BFS целый вагон. У нас на форуме есть алгоритм Дейкстры.


Добавлено: Июль 25, 2015, 13:37:49
На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
Тема не решена

Русское сообщество AutoIt


Оффлайн tarhitay [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Хорошо, что не проставил тему решенной.

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

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

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
($locations[2])[0]


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

Код: AutoIt [Выделить]
$Temp = $locations[2]
$Temp[0] = 1
$locations[2] = $Temp
MsgBox(0,"",($locations[2])[0])


Оффлайн tarhitay [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
2774 Просмотров
Последний ответ Апрель 24, 2010, 09:25:01
от madmasles
35 Ответов
11914 Просмотров
Последний ответ Январь 11, 2011, 17:48:07
от Sky-WaLkeR
11 Ответов
6973 Просмотров
Последний ответ Май 18, 2011, 09:34:57
от RUVATA
6 Ответов
4289 Просмотров
Последний ответ Сентябрь 01, 2011, 04:59:04
от joiner
6 Ответов
4169 Просмотров
Последний ответ Ноябрь 10, 2011, 03:24:16
от joiner
3 Ответов
2440 Просмотров
Последний ответ Август 28, 2012, 17:46:52
от AZJIO
3 Ответов
3508 Просмотров
Последний ответ Декабрь 18, 2012, 10:36:26
от madmasles
1 Ответов
1998 Просмотров
Последний ответ Август 13, 2013, 11:09:23
от Garrett
2 Ответов
633 Просмотров
Последний ответ Февраль 22, 2016, 16:22:42
от Alofa
5 Ответов
766 Просмотров
Последний ответ Январь 11, 2017, 13:26:16
от InnI