1

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);

这可能吗?我认为先询问然后尝试会更聪明...

4

2 回答 2

3

flex 是否允许数组集合中的键为空或缺失?

在 Flex 中,Array 或 ArrayCollection 不使用键。数组本质上是基于索引的。您可以在数组中有一个为 null 或其他“非活动”值的项目吗?是的,我不明白为什么不。

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

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 调试模式,您可以看到已设置并跟踪字典值。

于 2011-07-12T18:34:20.343 回答
2

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

var dict:Dictionary = new Dictionary();
dict[studentId] = studentObject;
于 2011-07-12T18:33:06.947 回答