Scala/如何根据两个值删除元组数组的重复项?
Scala / How to remove duplicates of an array of tuples based on two values?
我有一个包含数百万个元组元素的数组,例如:
var arr: ArrayBuffer[(String, String)] = ArrayBuffer[(String, String)]()
arr += (("Hamburg", "Street1"))
arr += (("Hamburg", "Street2"))
arr += (("Hamburg", "Street1")) // duplicate - remove
arr += (("Berlin", "StreetA"))
arr += (("Berlin", "StreetZ"))
arr += (("Berlin", "StreetZ")) // duplicate - remove
arr += (("Berlin", "StreetA")) // duplicate - remove
我现在想删除该数组中的重复项,其中 City 和 Street 相等。
类似于:
arr.distinctBy(_._1&_._2) // doesn't work just for illustration
是否有一个简单的解决方案,如何获得如下输出:
(("Hamburg", "Street1"))
(("Hamburg", "Street2"))
(("Berlin", "StreetA"))
(("Berlin", "StreetZ"))
在您的阵列上调用 arr.toSet
将执行您需要的操作:
arr.toSet
res34: Set[(String, String)] = Set(
("Hamburg", "Street1"),
("Hamburg", "Street2"),
("Berlin", "StreetA"),
("Berlin", "StreetZ")
)
元组是 case classes,因此提供了 equals
和 hashCode
方法来支持比较。
如果您的用例是确保集合不包含重复项,您通常应该使用 set
。这允许您的代码的其他读者推断集合中没有重复项。
由于 equals
和 hashCode
被元组覆盖,您可以使用 distinct
实际上是 distinctBy(identity)
:
val result = arr.distinct
我有一个包含数百万个元组元素的数组,例如:
var arr: ArrayBuffer[(String, String)] = ArrayBuffer[(String, String)]()
arr += (("Hamburg", "Street1"))
arr += (("Hamburg", "Street2"))
arr += (("Hamburg", "Street1")) // duplicate - remove
arr += (("Berlin", "StreetA"))
arr += (("Berlin", "StreetZ"))
arr += (("Berlin", "StreetZ")) // duplicate - remove
arr += (("Berlin", "StreetA")) // duplicate - remove
我现在想删除该数组中的重复项,其中 City 和 Street 相等。 类似于:
arr.distinctBy(_._1&_._2) // doesn't work just for illustration
是否有一个简单的解决方案,如何获得如下输出:
(("Hamburg", "Street1"))
(("Hamburg", "Street2"))
(("Berlin", "StreetA"))
(("Berlin", "StreetZ"))
在您的阵列上调用 arr.toSet
将执行您需要的操作:
arr.toSet
res34: Set[(String, String)] = Set(
("Hamburg", "Street1"),
("Hamburg", "Street2"),
("Berlin", "StreetA"),
("Berlin", "StreetZ")
)
元组是 case classes,因此提供了 equals
和 hashCode
方法来支持比较。
如果您的用例是确保集合不包含重复项,您通常应该使用 set
。这允许您的代码的其他读者推断集合中没有重复项。
由于 equals
和 hashCode
被元组覆盖,您可以使用 distinct
实际上是 distinctBy(identity)
:
val result = arr.distinct