Apache flex Flex 3:数组集合中的空键。。。可能的
flex是否允许数组集合中存在空键或缺少键?例如,以下代码可以吗: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号并不总是连
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先生,你应该取消删除你对这个问题的答案;我相信这是正确的解决办法。添加到解决方案中的注释说明了不正确的信息;主要是你建议的方法行不通。确实如此,而且与我自己的答案非常相似。