Что эквивалентно foreach (с ключами) в ActionScript - PullRequest
3 голосов
/ 11 июня 2009

Я ищу эквивалент цикла foreach с ключами в Actionscript. В PHP это будет:

foreach($array as $key => $value)
{
}

Я нашел два решения, которые будут работать, но мне интересно, есть ли лучший способ сделать это. Первое решение - использовать цикл for..in. Что дает вам ключи, но вы все равно должны использовать ключ для доступа к нужному элементу в вашей структуре. Например:

for(var key:String in results)
{
    trace(key + ": " + results[key]);
}

Второй вариант - это цикл для каждого .. в, который, я считаю, является новым в AS3. С этим решением я не могу сказать, что это за ключи. Например:

for each(var row:* in results)
{
    trace(row);
}

В настоящее время я собираюсь использовать для ... в. Я просто ищу лучший путь.

Спасибо, Rob

Обновление: Скорость не такая уж большая проблема, потому что массив никогда не будет слишком большим. Порядок имеет значение, и я хотел бы получить ключи в порядке вставки. Вот пример массива:

sites = {'site1': 34, 'site2': 52, 'site3': 66}

Я хотел бы использовать ключ и значение каждой записи.

Я хочу максимально упростить структуру моего массива. Я мог бы изменить массив сайтов выше, чтобы он выглядел так:

sites = {{'name': 'site1', 'id': 34}, 
    {'name': 'site2', 'id': 52},
    {'name': 'site3', 'id': 66}}

Однако я бы не стал идти по этому пути, потому что он добавляет больше измерений в мою структуру массива.

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Это зависит от типа вашего объекта. Если вы используете словарь, у вас есть:

DictionaryUtil.getKeys (MyObject)

Я бы не использовал для ... в, если вы просто не выбрасываете или просто не хотите ключи и ничего больше. Это объект, поэтому сортировка не гарантируется и будет меняться. Если сортировка не является проблемой, это (для ... в или словарь) ваш лучший выбор.

Грант говорит больше о словаре здесь: http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html.

0 голосов
/ 16 июня 2009
for(var i:String in myArray) // loops through the items in the array
    myArry[i] += 'new message will show'


for each(var i:String in myArray) // creates a copy of the array as it loops
    myArray[i] += 'this change will not show outside the loop';

Последнее отлично подходит, если вам нужно минимизировать переменные во время цикла, но вы хотите сохранить исходный объект для остальной части вашей программы. Особенно удобно для форматирования или перевода значений для определенной части вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...