8

私は2つのリストを持っています:List(1,1,1) , List(1,0,1)

私は以下を取得したい:

  1. 最初のリストに 1 を含み、対応するリストの同じ位置に 0 を含むすべての要素の数、およびその逆の数。上記の例では、最初のリストの中間位置に 1 が含まれ、2 番目のリストの同じ位置 (中間) に 0 が含まれているため、これは 1 , 0 になります。

  2. 1 が最初のリストにあり、1 が 2 番目のリストにもあるすべての要素の数。上記の例では、対応する各リストに 2 つの 1 があるため、これは 2 です。クラス List の intersect メソッドを使用してこれを取得できます。

上記のポイント1に対する答えを探しています。アイテムを数える反復アプローチを使用できますが、より機能的な方法はありますか? コード全体は次のとおりです。

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))
  }
}
4

6 に答える 6

13

最初のものについて:

scala> val a = List(1,1,1)
a: List[Int] = List(1, 1, 1)

scala> val b = List(1,0,1)
b: List[Int] = List(1, 0, 1)

scala> a.zip(b).filter(x => x._1==1 && x._2==0).size
res7: Int = 1

2番目の場合:

scala> a.zip(b).filter(x => x._1==1 && x._2==1).size
res7: Int = 2
于 2013-07-23T14:10:34.613 に答える