Ho due liste: List(1,1,1) , List(1,0,1)
Confrontando articoli in due liste
voglio ottenere le seguenti:
Un conteggio di ogni elemento che contiene un 1 nella prima lista e uno 0 nella corrispondente lista alla stessa posizione e viceversa. Nell'esempio sopra questo sarebbe 1, 0 poiché il primo elenco contiene un 1 in posizione centrale e il secondo elenco contiene uno 0 nella stessa posizione (al centro).
Un conteggio di ogni elemento in cui 1 è nel primo elenco e 1 è anche nel secondo elenco. Nell'esempio sopra questo è due poiché ci sono due 1 in ogni lista corrispondente. Posso ottenere questo usando il metodo intersect di List di classe.
Sto solo cercando una risposta al punto 1 sopra. Potrei usare un approccio iterativo per contare gli oggetti ma esiste un metodo più funzionale? Qui è l'intero codice:
class Similarity {
def getSimilarity(number1: List[Int], number2: List[Int]) = {
val num: List[Int] = number1.intersect(number2)
println("P is " + num.length)
}
}
object HelloWorld {
def main(args: Array[String]) {
val s = new Similarity
s.getSimilarity(List(1, 1, 1), List(1, 0, 1))
}
}
Non potresti semplicemente dire 'x => x._1 == 1 && x._2 == 0'? –
In realtà è possibile sostituire 'filter (predicate) .size' con solo' count (predicato) ' –