【问题标题】:What is the equivalent of foreach (with keys) in ActionScriptActionScript 中的 foreach(带键)的等价物是什么
【发布时间】:2009-06-11 16:44:17
【问题描述】:

我正在寻找与 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);
}

暂时,我打算用for..in。我只是在寻找更好的方法。

谢谢, 抢

更新:速度不是什么大问题,因为数组永远不会非常大。顺序确实很重要,我想按插入顺序获取密钥。下面是数组的一个例子:

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

我想使用每个条目的键和值。

我想让我的数组结构尽可能简单。我可以将上面的站点数组更改为:

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

但是,我宁愿不走这条路,因为它为我的数组结构增加了更多维度。

【问题讨论】:

  • 你可能指的是 PHP 而不是 C# ;)
  • 好的,有几个问题:速度重要吗?顺序是否重要,即您想按插入顺序还是按什么顺序获取密钥?数组是数字的吗?密度大吗?
  • 我用一些更详细的信息更新了我的问题。

标签: apache-flex actionscript-3 foreach


【解决方案1】:

这取决于您的对象类型。如果你使用字典,你有:

DictionaryUtil.getKeys(myObject)

我不会使用 for...in ,除非您只是在倾倒或纯粹想要钥匙而不是其他任何东西。它是一个对象,因此不能保证排序并且会有所不同。如果排序不是问题,这(for...in 或字典)是您最好的选择。

Grant 在此处详细介绍字典:http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html

【讨论】:

  • 有了你更新的描述,我相信你会想要改变你的数据结构。第一个结构是一个关联数组,它不会保存您的插入顺序。后者是您需要这样做的方式。我建议将值对象与 {..} 用于您的内部对象。
  • 再想一想,你说得对,如果我只是走 assoc 数组路线,插入顺序就会丢失。您能否举例说明使用值对象与我现在使用的 {..} 相比的含义?
  • var b:MyObject = new MyObject(); b.blah = "你好世界"; b.isTopOfTheWorld = true; b.eek =“哈”; ...其他 vo 在这里创建... var myArray:Array = [b, ...];注意:我知道这条评论看起来很夸张,但基本上在解析你的内容时会创建一个带有属性的简单对象。这使您可以进行绑定等操作,并使您的代码更易被其他人阅读/“遵循”。
【解决方案2】:
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';

如果您需要在循环期间最小化变量但希望为程序的其余部分保留原始对象,则后者非常有用。对于格式化或转换程序特定部分的值特别方便。

【讨论】:

  • for .. in 通过键循环 var,for each .. in 通过值循环 var。它与复制数组无关。
  • 我的代码是正确的,请用我的术语解决你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2022-11-28
  • 2011-03-27
  • 2014-09-08
  • 2014-05-08
  • 2012-07-20
相关资源
最近更新 更多