【问题标题】:Convert Vector.<SomeType> to Array?将 Vector.<SomeType> 转换为数组?
【发布时间】:2011-03-09 16:54:03
【问题描述】:

不幸的是,在 Actionscript 中,似乎还没有完全支持 Vector 类。在某些情况下,我需要将 Vector 转换为数组(例如创建 ArrayCollection)。我认为这可以解决问题:

var myVector:Vector.<MyType> = new Vector.<MyType>();

var newArray:Array = new Array(myVector);

显然,这只是创建了一个数组,其中数组的第一个索引包含完整的 Vector 对象。这是我唯一的选择吗:

var newArray:Array = new Array(myVector);

for each(var item:MyType in myVector)
{
    newArray.push(item); 
}

我觉得这会使代码变得很混乱,我需要在很多地方这样做。 Vector 类没有实现任何类型的接口,所以据我所知,我无法创建通用函数来转换为数组。每次我想将 Vector 转换为数组时,有什么方法可以做到这一点而不会添加这种混乱?

【问题讨论】:

标签: arrays apache-flex actionscript vector arraycollection


【解决方案1】:

没有简单/快速的方法可以做到这一点,最好的解决方案是使用这样的实用程序类:

package {

    public class VectorUtil {

        public static function toArray(obj:Object):Array {
            if (!obj) {
                return [];
            } else if (obj is Array) {
                return obj as Array;
            } else if (obj is Vector.<*>) {
                var array:Array = new Array(obj.length);
                for (var i:int = 0; i < obj.length; i++) {
                    array[i] = obj[i];
                }
                return array;
            } else {
                return [obj];
            }
        } 
    } 
}

然后你只需要将你的代码更新为这样的:

var myArray:Array = VectorUtil.toArray(myVector);

【讨论】:

  • 谢谢,听起来这是最好的选择。我希望有一种方法可以将 'Vector.' 作为类型传递给方法。
  • 这让我很难过。这种语言有一个集合问题。应该有一个对所有事情都适用的。
  • 在 Apache Flex 中,现在有用于将向量包装为 IList 的新类:org.apache.flex.collections.VectorListorg.apache.flex.collections.VectorCollection
  • 使用 Apache Flex SDK,您可以使用 (new VectorList(myVector)).toArray() 将 Vector 转换为集合。如果不是更早的版本,至少可以从 Apache Flex SDK v 4.12 获得此功能。 flex.apache.org/asdoc/org/apache/flex/collections/…
【解决方案2】:

Paul at Work 找到 a better way 去做。

var newArray:Array = [].concat(myVector);

【讨论】:

  • 它不起作用,在引用的SO-Answer中指出了这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多