2017-02-01 1 views
0

Ich habe 2 Listeden Index des Elements in scala Liste Vergleich

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

Jetzt möchte ich wissen, ob der Index aller Vorkommen von Harry sowohl in der Liste sind die gleichen oder nicht. Was ist der beste Weg, um es in Scala zu tun?

Antwort

4

ich Iteratoren verwenden würde nur so viel wie nötig zu vergleichen, etwa so:

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

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

Danke für die Lösung @megri ich wieder Anzeige darüber und habe es auch verstanden. – Explorer

2

Sie die Listen zusammen .zip könnten und dann .exists verwenden um zu überprüfen, ob ein Tupel ist, wo man gleich "Harry" und die andere nicht:

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 
Verwandte Themen