在 Scala 中定义自定义 HashSet?
Define custom HashSet in Scala?
基本上我有三个变量a、b和c。变量之间有一定的关系。我需要将变量存储在一个 HashSet 中,这样每个变量都会不同并且不会有任何冗余。
Java方式:
在 java 中,我只是创建一个自定义 class,重写该自定义 class 中的散列和相等方法,然后我就完成了。
HashSet<CustomClass> hSet = new HashSet<CustomClass>();
Scala 之道(Scala 新手):
Introduction to Sets and Maps for Scala
这里我在 trait , class 和 object 之间做出选择感到困惑。显然,乍一看我不能将 trait 和 class 分配给 var / val(如果可以完成上述操作,请告诉我)。所以对象是要走的路。
object State {
var a: Int;
var b: Int;
var c: Int;
}
问题 1:
我应该如何定义自定义 (class/trait/object) HashSet?
Scala 中的普通 HashSet 声明:var hSet = new HashSet();
问题二:
如何给新对象赋值?例如,
var newState = State;
newState.a = 100;
hSet.add(newState);
错误:类型不匹配;发现:需要 Int(100):Int.type
谢谢
简短的回答是:Scala 方式与 Java 方式相同。也就是说,case classes 可以通过自动构建有效的散列和 equals 方法(以及 toString
和 apply
来帮助您)。它是这样的:
case class MyClass(myInt: Int, myString: String)
val hSet = new mutable.HashSet[MyClass]();
hSet += MyCLass(2, "foo")
请注意,HashSet 具有类型参数,就像 Java 中一样。对于不可变集,语法略有不同,但从 Java 开始,这会感觉更容易。
此外,当您定义 object
时,您基本上是在用单个实例(单例模式)定义 class。这显然不是你想要的。
基本上我有三个变量a、b和c。变量之间有一定的关系。我需要将变量存储在一个 HashSet 中,这样每个变量都会不同并且不会有任何冗余。
Java方式:
在 java 中,我只是创建一个自定义 class,重写该自定义 class 中的散列和相等方法,然后我就完成了。
HashSet<CustomClass> hSet = new HashSet<CustomClass>();
Scala 之道(Scala 新手):
Introduction to Sets and Maps for Scala
这里我在 trait , class 和 object 之间做出选择感到困惑。显然,乍一看我不能将 trait 和 class 分配给 var / val(如果可以完成上述操作,请告诉我)。所以对象是要走的路。
object State {
var a: Int;
var b: Int;
var c: Int;
}
问题 1: 我应该如何定义自定义 (class/trait/object) HashSet?
Scala 中的普通 HashSet 声明:var hSet = new HashSet();
问题二: 如何给新对象赋值?例如,
var newState = State;
newState.a = 100;
hSet.add(newState);
错误:类型不匹配;发现:需要 Int(100):Int.type
谢谢
简短的回答是:Scala 方式与 Java 方式相同。也就是说,case classes 可以通过自动构建有效的散列和 equals 方法(以及 toString
和 apply
来帮助您)。它是这样的:
case class MyClass(myInt: Int, myString: String)
val hSet = new mutable.HashSet[MyClass]();
hSet += MyCLass(2, "foo")
请注意,HashSet 具有类型参数,就像 Java 中一样。对于不可变集,语法略有不同,但从 Java 开始,这会感觉更容易。
此外,当您定义 object
时,您基本上是在用单个实例(单例模式)定义 class。这显然不是你想要的。