Просмотр полной версии : Вопрос про массивы
artfla$her
17.04.2004, 01:43
Народ, есть такой вопрос: если массив задан через <имя массива>[<имя элемента>], например a["name"], и так далее все элементы прописаны, то есть ли варианты, кроме как задания напрямую имени того или иного элемента, обратиться к его значению.
Проще - a["name"]="One";
trace(a["name"])
По-другому узнать значение элемента "name" можно? Через его индекс не получается..... Причем если массив задан таким образом, то при чтении свойства length возвращается 0, как это ни странно. Почему?
sergwizard
17.04.2004, 11:01
Если a["name"] - это массив, то я бульдозер. Посмотри в хэлпе про массивы.
Во флэше нету ассоциативных массивов, а a["name"] соотвествует a.name
artfla$her
18.04.2004, 00:26
Ага, понятно :) Просто у меня в голове клин был, что если какая строка с квадратными скобками, то сразу массив :D Где-то увидел подобные строки, вот и подумал, что это массив, и что можно ему элементы именовать прям строками :) Спасибо, не буду больше заблуждаться и искать невозможного :)
sergwizard
18.04.2004, 02:59
Ну, почему же...? Вот это, например, - массив, его можно задавать так:
a = ["name","nick","age","gender","height","weight"];
Можно так:
a = new Array("name","nick","age","gender","height","weight");
Можно так:
a = new Array();
a[0]= "name";
a[1]= "nick";
a[2]= "age";
a[3]= "gender";
a[4]= "height";
a[5]= "weight";
А затем:
for(i=0;i<a.length;i++){
trace(a[i]);
}
BlooDHounD
18.04.2004, 03:24
Да! Но его нельзя задать так:a = new Array();
a["0"] = "name";
a["1"] = "nick";
a["2"] = "age";
a["3"] = "gender";
a["4"] = "height";
a["5"] = "weight";Почувствуй разницу.
2BlooDHounD: неудачный пример:a["0"]="name" - так можно, нельзя наоборот a["name"] = "0";...
BlooDHounD
18.04.2004, 20:12
2 silinВо флэше нету ассоциативных массивов, а a["name"] соотвествует a.nameИ я тоже так думаю! Уже намучался с этим. Я привёл пример не правельного массива, т.к. "0", "1", "2" ... "n" - в данном случае строки.
я и говорю, что привел неудачный пример, потому как строки "0", "1", "2" ... "n" флэш преобразует в нумберы
и такой код
a = new Array();
a["0"] = "name";
a["1"] = "nick";
trace(a);
работает (посмотри)
BlooDHounD
18.04.2004, 21:33
Признаю.
artfla$her
19.04.2004, 00:13
Хватит уж добивать этот бедный вопрос и меня :) Я говорил не про невозможность задания строковых значений элементам, а про невозможность задания элементам строковых имен, а не нумберов. a[0]="name" - вполне корректный массив. И еще раз спасибо за ответы.
это кто сказал , что нельза задать ассоциативный массив?
a = []
a["name"] = 100
a["date"] = 100
for (i in a) trace(a[i])
другое дело, что работать он будет не совсем как массив... но это уже второй вопрос.
массив является наследником Object и имеет все возможности Object, в том числе и такие.
artfla$her
19.04.2004, 00:53
Так-так, это уже лучше :) Нет, действительно реальный способ, я чего-то и не подумал про него.... Спасибо, BitSky!
Nox Noctis
19.04.2004, 23:31
разница всего лишь в том, к чему мрожно привести литерал, стоящий в квадратных скобках.
я неоднократно использовал ассоциативные массивы, ключами в которых являются ссылки на клипы.
при этом обращение вида: a[_root] преобразуется в обращение a["_level0"], что нормально работает.
надо только помнить, что сначала идёт попытка преобразовать ключ к числовому значению, а только потом берётся строка.
и еще то, что индексируются (влияют на свойство length) только элементы с числовыми ключами.
artfla$her
20.04.2004, 01:15
Да, кстати, это плохо, что индексы получают токо элементы с числовыми ключами - не особенно развернешься :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.