Scala Spark从HashMap获取元素
我有一个HashMap: 还有一个数组: 我从该数组中获取一个元素: 并要检查地图中是否存在:Scala Spark从HashMap获取元素,scala,hashmap,apache-spark,Scala,Hashmap,Apache Spark,我有一个HashMap: 还有一个数组: 我从该数组中获取一个元素: 并要检查地图中是否存在: 然而,我错了。为什么?breeze.linalg.DenseVector是一个“类”,因此可以通过实例相等性进行比较: class C(i: Int) new C(1) == new C(1) yields false 如果您看到一些代码比较scala中的两个实例,那么它们在“case类”上工作,因为 它们有一个“特殊的equals/hashCode”方法,或者在处理“普通类”时实现自己的equa
然而,我错了。为什么?breeze.linalg.DenseVector是一个“类”,因此可以通过实例相等性进行比较:
class C(i: Int)
new C(1) == new C(1) yields false
如果您看到一些代码比较scala中的两个实例,那么它们在“case类”上工作,因为
它们有一个“特殊的equals/hashCode”方法,或者在处理“普通类”时实现自己的equals/hashCode
case class CC(i: Int)
new CC(1) == new CC(1) yields true
我认为你应该使用
<DenseVector instance>.values.deep == <DenseVecotor instance>.values.deep
警告:映射上的“find”将映射视为元组的顺序集合,并测试每个元素,直到找到匹配项为止,如果没有匹配项,则返回“None”。这基本上与从@maasgDenseVector获得一个列表注释是case类?来自Spark breeze.linalg包的DenseVector。@Sergey Lagutin我的代码在这里:所以请随意测试它。看起来hashCode方法没有为您的键类重写。检查一下我的假设。我在提供的代码中没有看到任何“pointsMap…”——请注意,按照SO指南,应该向代码提供问题,以避免外部源的更改会使问题无效——使其他人无法使用。那么,您可以在问题中发布代码吗?但是HashMap没有map.keys.deep方法。那么我该如何比较呢?@bob我添加了一个在地图中查找值的示例。警告:地图上的“查找”将地图视为元组的顺序集合,并测试每个元素,直到找到匹配项为止,如果没有匹配项,则返回“无”。这基本上与列出一份清单是一样的。@maasg good catch!-如何避免我只能考虑将DenseVector封装在一个覆盖hashMap/equals的类中?我本来想看一下代码,但似乎它变了,因为我没有找到问题中提到的代码。在Spark中,拥有地图往往没有意义。
val m = Map(Array(1, 2) -> "one", Array(1, 2) -> "two")
m.find(_._1 == Array(1, 2)) yields None
m.find(_._1.deep == Array(1, 2).deep) yields Some(...)