比较 Scala 列表中元素的索引
comparing the index of element in scala list
我有 2 个列表
val listA = List("Mary", "Harry", "Marry", "Harry", "Marry")
val listB = List("Mary", "Harry", "Marry", "Harry", "Marry")
现在我想知道两个列表中所有出现的Harry
的索引是否相同。在 scala 中最好的方法是什么?
我会使用迭代器只在需要的时候进行比较,就像这样:
def indexesOf(ls: List[String], word: String) =
ls.iterator.zipWithIndex.collect { case (`word`, i) => i }
indexesOf(listA, "Harry") sameElements indexesOf(listB, "Harry")
您可以 .zip
将列表放在一起,然后使用 .exists
检查是否存在一个元组,其中一个等于 "Harry"
而另一个不等于:
scala> val listA = List("Mary", "Harry", "Marry", "Harry", "Marry")
listA: List[String] = List(Mary, Harry, Marry, Harry, Marry)
scala> val listB = List("Mary", "Harry", "Marry", "Harry", "Marry")
listB: List[String] = List(Mary, Harry, Marry, Harry, Marry)
scala> (listA zip listB).exists { case (a, b) => (a == "Harry" ^ b == "Harry") }
res5: Boolean = false
scala> val listA = List("Mary", "Harry", "Marry", "Harry", "Marry")
listA: List[String] = List(Mary, Harry, Marry, Harry, Marry)
scala> val listB = List("Mary", "Harry", "Marry", "Harry", "Harry") // changed the last one
listB: List[String] = List(Mary, Harry, Marry, Harry, Harry)
scala> (listA zip listB).exists { case (a, b) => (a == "Harry" ^ b == "Harry") }
res6: Boolean = true
我有 2 个列表
val listA = List("Mary", "Harry", "Marry", "Harry", "Marry")
val listB = List("Mary", "Harry", "Marry", "Harry", "Marry")
现在我想知道两个列表中所有出现的Harry
的索引是否相同。在 scala 中最好的方法是什么?
我会使用迭代器只在需要的时候进行比较,就像这样:
def indexesOf(ls: List[String], word: String) =
ls.iterator.zipWithIndex.collect { case (`word`, i) => i }
indexesOf(listA, "Harry") sameElements indexesOf(listB, "Harry")
您可以 .zip
将列表放在一起,然后使用 .exists
检查是否存在一个元组,其中一个等于 "Harry"
而另一个不等于:
scala> val listA = List("Mary", "Harry", "Marry", "Harry", "Marry")
listA: List[String] = List(Mary, Harry, Marry, Harry, Marry)
scala> val listB = List("Mary", "Harry", "Marry", "Harry", "Marry")
listB: List[String] = List(Mary, Harry, Marry, Harry, Marry)
scala> (listA zip listB).exists { case (a, b) => (a == "Harry" ^ b == "Harry") }
res5: Boolean = false
scala> val listA = List("Mary", "Harry", "Marry", "Harry", "Marry")
listA: List[String] = List(Mary, Harry, Marry, Harry, Marry)
scala> val listB = List("Mary", "Harry", "Marry", "Harry", "Harry") // changed the last one
listB: List[String] = List(Mary, Harry, Marry, Harry, Harry)
scala> (listA zip listB).exists { case (a, b) => (a == "Harry" ^ b == "Harry") }
res6: Boolean = true