Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“创建对象相等”;HashMap";在ActionScript3中作为java HashMap_Java_Apache Flex_Actionscript 3 - Fatal编程技术网

“创建对象相等”;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的集合框架,它可以让您更好地控制对象相等性和对象哈希。查看更多信息。

如果没有编写自己的数据结构,这是实现预期结果的唯一方法。如果没有编写自己的数据结构,这是实现预期结果的唯一方法。