Scala:将数组放入Set或Map的轻量级方法

时间:2011-11-21 22:39:36

标签: arrays scala set equals hashcode

由于==不适用于Arrays,我无法有效地创建一组数组(或使用数组键映射)。我宁愿不把我的数组转换为Vector或List或其他东西。有没有一种轻量级的方法来定义Arrays上的自然比较和哈希码,所以我可以将它们粘贴在Set?

1 个答案:

答案 0 :(得分:11)

使用collection.mutable中的WrappedArray。它为具有最小开销的数组提供了适当的相等性。 applyupdate等调用被委托给底层数组。还有基本类型的特殊类(例如WrappedArray.ofInt),以避免装箱和拆箱。

scala> new WrappedArray.ofInt(Array(2, 3, 4))
res35: scala.collection.mutable.WrappedArray.ofInt = WrappedArray(2, 3, 4)

scala> new WrappedArray.ofInt(Array(2, 3, 4))
res36: scala.collection.mutable.WrappedArray.ofInt = WrappedArray(2, 3, 4)

scala> res35 == res36
res37: Boolean = true