ArrayCollection 只是一个 Array 的包装器,并且仅在 Flex 中可用。
在 AS3 中,您确实有 3 种基本哈希表类型:数组、对象和字典。您可以根据要使用的键类型选择使用哪一个:整数、字符串或对象引用。数组会将任何键转换为 int,Object 会将任何键转换为字符串。Dictionary 的作用类似于字符串键的对象(并将原语转换为字符串),但它真正擅长的是使用对象引用作为键。
如果您想使用单个 int 作为唯一键,请使用数组。如果要使用单个字符串作为唯一键,请使用对象。如果您想使用对象引用作为唯一键,请使用字典。
toString()
在您的情况下,您可能应该在“关键”类上使用一个对象和一个自定义方法。这是因为您想使用原始值的组合(不是对象引用)作为唯一键。没有办法在本地执行此操作,因此您必须将这些值作为单个字符串混合在一起。对象是字符串键的最佳(最快)哈希表,因此这是您应该使用的集合。
例子:
class User {
private var m_iUID:int;
private var m_blnIsCurrent:Boolean;
public var m_strNearID:String;
public function User(UID:int, IsCurrent:Boolean) {
m_iUID = UID;
m_blnIsCurrent = IsCurrent;
}
// Custom toString to mash together primitives
public function toString() {
return m_iUID.toString() + "-" + (m_blnIsCurrent ? "1" : "0");
}
}
// Later:
var allUsers:Object = {}
var user1:User = new User(231049, true);
var user2:User = new User(0x2309, false);
// Implicitly calls toString():
allUsers[user1] = "User 1";
allUsers[user2] = "User 2";
// All of the following will successfully retrieve the value for user1 ("User 1"):
// ONLY the first would work if allUsers was a Dictionary
trace(allUsers[user1]);
trace(allUsers[user1.toString()]);
trace(allUsers["231049-1"]);
trace(allUsers[new User(231049, true)]);