Scala: легкий способ поместить массивы в набор или карту - PullRequest
8 голосов
/ 22 ноября 2011

Поскольку == не работает с массивами, я не могу эффективно создать набор массивов (или карту с ключами массивов). Я бы предпочел не брать на себя снижение производительности преобразования моих массивов в вектор или список или что-то еще. Есть ли более легкий способ определения естественного сравнения и хэш-кода для массивов, чтобы я мог поместить их в набор?

1 Ответ

11 голосов
/ 22 ноября 2011

Используйте WrappedArray от collection.mutable.Это обеспечивает правильное равенство для массивов с минимальными издержками.Вызовы apply, update и т. Д. Делегируются базовому массиву.Также есть специальные классы для примитивных типов (например, 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
...