我正在寻找与Actionscript中的键相关的foreach循环。在PHP中,这将是:
foreach($array as $key => $value)
{
}
我找到了两种可行的解决方案,但我想知道是否有更好的方法可以做到这一点。第一种解决方案是使用for..in循环。它为您提供了密钥,但您仍然必须使用密钥来访问结构中的正确元素。例如:
for(var key:String in results)
{
trace(key + ": " + results[key]);
}
第二个选项是for each..in循环,我相信它是AS3中的新功能。有了这个解决方案,我无法分辨出键是什么。例如:
for each(var row:* in results)
{
trace(row);
}
目前,我将用于...。我只是在寻找更好的方法。
谢谢, 罗布
更新:速度不是很大,因为数组永远不会非常大。订单确实很重要,我想按插入顺序获取密钥。以下是该数组的示例:
sites = {'site1': 34, 'site2': 52, 'site3': 66}
我想使用密钥以及每个条目的值。
我想让我的数组结构尽可能简单。我可以将上面的网站数组更改为:
sites = {{'name': 'site1', 'id': 34},
{'name': 'site2', 'id': 52},
{'name': 'site3', 'id': 66}}
但是,我宁愿不去这条路,因为它为我的数组结构添加了更多维度。
答案 0 :(得分:2)
这取决于您的对象类型。如果你正在使用词典,你有:
DictionaryUtil.getKeys(myObject的)
除非你只是倾销或纯粹想要钥匙而没有别的,否则我不会用......这是一个对象,所以排序不能保证,并会有所不同。如果排序不是问题,那么(for ... in或dictionary)是你最好的选择。
格兰特在这里更多地谈论字典:http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html。
答案 1 :(得分:0)
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';
如果您需要在循环期间微调变量但希望保留程序其余部分的原始对象,则后者非常适用。特别方便格式化或翻译程序特定部分的值。