“创建对象相等”;HashMap";在ActionScript3中作为java HashMap
但我想这样使用字典:“创建对象相等”;HashMap";在ActionScript3中作为java HashMap,java,apache-flex,actionscript-3,Java,Apache Flex,Actionscript 3,但我想这样使用字典: const jonny1 : Person = new Person("jonny", 26); const jonny2 : Person = new Person("jonny", 26); const table : Dictionary = new Dictionary(); table[jonny1] = "That's me"; trace(table[jonny1]) // traces: "That's me" trace(table[jonny2])
const jonny1 : Person = new Person("jonny", 26);
const jonny2 : Person = new Person("jonny", 26);
const table : Dictionary = new Dictionary();
table[jonny1] = "That's me";
trace(table[jonny1]) // traces: "That's me"
trace(table[jonny2]) // traces: undefined.
总之,我想实现一个数据结构,它的工作原理类似于java中的HashMap,我不相信您可以这样使用它。从文件中:
Dictionary类允许您创建属性的动态集合,该集合使用严格相等(==)对非基本对象键进行键比较。当一个对象用作键时,该对象的标识用于查找该对象,而不是对其调用toString()返回的值
注意对严格相等和对象标识的引用
我不知道是否还有另一种数据结构可以工作,但不幸的是,在对象本身中似乎没有什么可以改变字典
的行为
您可能想看看开源项目,尽管我无法从描述中立即判断它是否符合您的要求
你可能还想调查一下
(不过,这些都是基于一点研究——我实际上从来没有做过任何动作脚本,所以请不要吝啬。)我不相信你能用那种方式。从文件中:
Dictionary类允许您创建属性的动态集合,该集合使用严格相等(==)对非基本对象键进行键比较。当一个对象用作键时,该对象的标识用于查找该对象,而不是对其调用toString()返回的值
注意对严格相等和对象标识的引用
我不知道是否还有另一种数据结构可以工作,但不幸的是,在对象本身中似乎没有什么可以改变字典
的行为
您可能想看看开源项目,尽管我无法从描述中立即判断它是否符合您的要求
你可能还想调查一下
(不过,这些都是基于一点研究——我从来没有真正做过任何动作脚本,所以请不要吝啬。)字典允许将复杂对象用作键。正如John提到的,Dictionary不能用作hashmap,因为它使用严格的等式来检查Dictionary的键 相反,对象可以用作贴图,其中键是字符串。这意味着,当您将复杂对象添加为键时,将调用对象toString()并将其用作映射中的键。在您的示例中,可以将toString()实现添加到Person类中,该类列出了使Person唯一的所有属性 考虑这个toString()方法: 如果随后运行以下测试,它将通过:
public function toString():String {
return "[Person(name:" + name + ", age=" + age + ")]";
}
如果使用调试器查看映射实例,您将看到:
public function testMap():void {
var jonny1:Person = new Person("jonny", 26);
var jonny2:Person = new Person("jonny", 26);
var map:Object = {};
map[jonny1] = "That's me";
assertEquals("That's me", map[jonny2]); // succeeds
}
注意:虽然这是可行的,但我不确定是否建议使用toString()方法来检查相等性。我认为ToStrug()是一个调试/日志辅助工具,它可能会改变(并且破坏代码)。正如John提到的,Dictionary不能用作hashmap,因为它使用严格的等式来检查Dictionary的键 相反,对象可以用作贴图,其中键是字符串。这意味着,当您将复杂对象添加为键时,将调用对象toString()并将其用作映射中的键。在您的示例中,可以将toString()实现添加到Person类中,该类列出了使Person唯一的所有属性 考虑这个toString()方法: 如果随后运行以下测试,它将通过:
public function toString():String {
return "[Person(name:" + name + ", age=" + age + ")]";
}
如果使用调试器查看映射实例,您将看到:
public function testMap():void {
var jonny1:Person = new Person("jonny", 26);
var jonny2:Person = new Person("jonny", 26);
var map:Object = {};
map[jonny1] = "That's me";
assertEquals("That's me", map[jonny2]); // succeeds
}
注意:虽然这是可行的,但我不确定是否建议使用toString()方法来检查相等性。我认为ToStRun()是一个调试/日志辅助工具,它可能会改变(并且破坏代码)。 < P>我写了一个集合框架,叫做AS3集合,它提供了对对象相等性和对象哈希的更多控制。查看更多信息。我已经编写了一个名为as3 collections的集合框架,它可以让您更好地控制对象相等性和对象哈希。查看更多信息。如果没有编写自己的数据结构,这是实现预期结果的唯一方法。如果没有编写自己的数据结构,这是实现预期结果的唯一方法。