2017-02-01 2 views
0

Je 2 Listecomparant l'indice de l'élément dans la liste des scala

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

Maintenant, je veux savoir si l'indice de toutes les occurrences de Harry dans les deux la liste sont identiques ou non. Quelle est la meilleure façon de le faire en Scala?

Répondre

4

j'utiliser itérateurs comparer uniquement autant que nécessaire, comme ceci:

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

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

Merci pour la solution @megri I re annonce à ce sujet et l'a compris aussi. – Explorer

2

Vous pouvez .zip les listes ensemble et ensuite utiliser .exists pour vérifier s'il y a un tuple où l'on égale "Harry" et la autre non:

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