Apache flex Flex 3:数组集合中的空键。。。可能的

Apache flex Flex 3:数组集合中的空键。。。可能的,apache-flex,key,arraycollection,Apache Flex,Key,Arraycollection,flex是否允许数组集合中存在空键或缺少键?例如,以下代码可以吗: var myAC:ArrayCollection = new ArrayCollection; myAC.addItemAt("hi", 0); myAC.addItemAt("hola", 4); myAC.addItemAt("bye", 17); myAC.addItemAt("adios", 32); 这就是为什么我要问。我的应用程序收到了一个充满学生姓名的XML列表。每个学生都有一个唯一的ID号。这些ID号并不总是连

flex是否允许数组集合中存在空键或缺少键?例如,以下代码可以吗:

var myAC:ArrayCollection = new ArrayCollection;
myAC.addItemAt("hi", 0);
myAC.addItemAt("hola", 4);
myAC.addItemAt("bye", 17);
myAC.addItemAt("adios", 32);
这就是为什么我要问。我的应用程序收到了一个充满学生姓名的XML列表。每个学生都有一个唯一的ID号。这些ID号并不总是连续的。我有一个函数,你可以输入学生ID号,然后返回他们的名字。由于列表中有数百名学生,在数组集合中循环时,为每个循环执行一个简单的for-each循环,查看传入的ID是否与当前正在查看的ID匹配,这是一种浪费。我想填充数组集合,并将学生ID作为键。这样,我可以执行以下操作来返回名称:

return myAC.getItemAt(sID);

这可能吗?我认为最好先问一下,然后再尝试一下…

如果不进行循环或顺序查找,是否有理由需要将其放入数组中?使用字典要容易得多:

var dict:Dictionary = new Dictionary();
dict[studentId] = studentObject;
var myAC:Dictionary= new Dictionary();
myAC["0"] = "hi";
myAC["4"] = "hola";
myAC["17"] = "bye";
myAC["32"] = "adios";

return myAC[sID];

如果不执行循环或顺序查找,是否有理由需要将其放入数组中?使用字典要容易得多:

var dict:Dictionary = new Dictionary();
dict[studentId] = studentObject;
var myAC:Dictionary= new Dictionary();
myAC["0"] = "hi";
myAC["4"] = "hola";
myAC["17"] = "bye";
myAC["32"] = "adios";

return myAC[sID];
flex是否允许数组集合中存在空键或缺少键

在Flex中,数组或ArrayCollection不使用键。数组本质上是基于索引的。数组中是否有空项或其他“非活动”值?是的,我不明白为什么不

如果希望通过键访问元素,则应使用泛型或。但是,如果这样做,则会丢失数组提供的任何排序。您的代码可以这样重写以使用字典:

var dict:Dictionary = new Dictionary();
dict[studentId] = studentObject;
var myAC:Dictionary= new Dictionary();
myAC["0"] = "hi";
myAC["4"] = "hola";
myAC["17"] = "bye";
myAC["32"] = "adios";

return myAC[sID];

在评论中提到,上面的代码将b/c,因为字典的键不能使用数字。然而,这里有一个完整的样本,证明情况并非如此:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            public var dict : Dictionary;

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                dict = new Dictionary();
                dict["0"] = "hi";
                dict["4"] = "hola";
                dict["17"] = "bye";
                dict["32"] = "adios";


                trace(dict["0"]);
                trace(dict["4"]);
                trace(dict["17"]);
                trace(dict["32"]);


            var obj : Object = new Object();
            obj["0"] = "hi";
            obj["4"] = "hola";
            obj["17"] = "bye";
            obj["32"] = "adios";

            trace(obj["0"]);
            trace(obj["4"]);
            trace(obj["17"]);
            trace(obj["32"]);


            }

        ]]>
    </fx:Script>
</s:Application>

如果运行示例ind debug模式,可以看到字典值已设置并跟踪

flex是否允许数组集合中存在空键或缺少键

在Flex中,数组或ArrayCollection不使用键。数组本质上是基于索引的。数组中是否有空项或其他“非活动”值?是的,我不明白为什么不

如果希望通过键访问元素,则应使用泛型或。但是,如果这样做,则会丢失数组提供的任何排序。您的代码可以这样重写以使用字典:

var dict:Dictionary = new Dictionary();
dict[studentId] = studentObject;
var myAC:Dictionary= new Dictionary();
myAC["0"] = "hi";
myAC["4"] = "hola";
myAC["17"] = "bye";
myAC["32"] = "adios";

return myAC[sID];

在评论中提到,上面的代码将b/c,因为字典的键不能使用数字。然而,这里有一个完整的样本,证明情况并非如此:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            public var dict : Dictionary;

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                dict = new Dictionary();
                dict["0"] = "hi";
                dict["4"] = "hola";
                dict["17"] = "bye";
                dict["32"] = "adios";


                trace(dict["0"]);
                trace(dict["4"]);
                trace(dict["17"]);
                trace(dict["32"]);


            var obj : Object = new Object();
            obj["0"] = "hi";
            obj["4"] = "hola";
            obj["17"] = "bye";
            obj["32"] = "adios";

            trace(obj["0"]);
            trace(obj["4"]);
            trace(obj["17"]);
            trace(obj["32"]);


            }

        ]]>
    </fx:Script>
</s:Application>


如果您运行sample ind debug模式,您可以看到字典值已被设置并跟踪。

@gerhard您是对的,我混淆了他的示例中的值和键。我的错;我将修复我的代码片段。但是,只要键值是一个字符串,就不需要在键值后面附加“\u1”“17”是一个完全有效的字符串。@gerhard我刚刚整理了一个简单的示例,以证明我更新的示例中的代码确实有效,尽管您声称该数字需要以“\ux”作为前缀。我将把它添加到我的答案中。@gerhard我更新了我的示例,以显示在使用这种方法时,使用泛型对象可以很好地工作的代码。我不知道是否有早期版本的FP不起作用;但是10.3和Flex 4.5.1没有任何问题。关于您的标志,您也可以在此注释字段或问题下的注释中ping用户(@user)。@Tim Post谢谢,我来试一试。@gerhard您是对的,我混淆了他的示例中的值和键。我的错;我将修复我的代码片段。但是,只要键值是一个字符串,就不需要在键值后面附加“\u1”“17”是一个完全有效的字符串。@gerhard我刚刚整理了一个简单的示例,以证明我更新的示例中的代码确实有效,尽管您声称该数字需要以“\ux”作为前缀。我将把它添加到我的答案中。@gerhard我更新了我的示例,以显示在使用这种方法时,使用泛型对象可以很好地工作的代码。我不知道是否有早期版本的FP不起作用;但是10.3和Flex 4.5.1没有问题。关于您的标志,您也可以在此评论字段或问题下的评论中ping用户(@user)。@Tim Post谢谢,我会试一试。@mrk您应该取消删除此问题的答案;我相信这是正确的解决办法。添加到解决方案中的注释说明了不正确的信息;主要是你建议的方法行不通。确实如此,而且与我自己的答案非常相似。@K先生,你应该取消删除你对这个问题的答案;我相信这是正确的解决办法。添加到解决方案中的注释说明了不正确的信息;主要是你建议的方法行不通。确实如此,而且与我自己的答案非常相似。