2017-02-01 17 views
0

私は今、私はリストの両方でHarryのすべてのオカレンスのインデックスが同じであるかどうかを知りたい2リストScalaのリスト内の要素のインデックスを比較

val listA = List("Mary", "Harry", "Marry", "Harry", "Marry") 
val listB = List("Mary", "Harry", "Marry", "Harry", "Marry") 

を持っています。スカラーでそれをする最善の方法は何ですか?

答えて

4

私はそうのように、必要なだけ多くを比較するためにイテレータを使用したい:

def indexesOf(ls: List[String], word: String) = 
    ls.iterator.zipWithIndex.collect { case (`word`, i) => i } 

indexesOf(listA, "Harry") sameElements indexesOf(listB, "Harry") 
+0

感謝それについての広告も理解した。 – Explorer

2

あなたが一緒にリストを.zipし、その後1は"Harry"と等しいタプルがあるかどうかを確認するために.existsを使用することができます他にはない:私は再@megriソリューションの

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 
関連する問題