我有两个字符串数组,比如说
A = ('abc', 'joia', 'abas8', '09ma09', 'oiam0')
和
B = ('gfdg', '89jkjj', '09ma09', 'asda', '45645ghf', 'dgfdg', 'yui345gd', '6456ds', '456dfs3', 'abas8', 'sfgds').
我想要做的只是计算B中出现的A中每个字符串的元素数量(如果有的话)。例如,此处生成的数组应为:C = (0, 0, 1, 1, 0)
。我怎么能这样做?
答案 0 :(得分:6)
试试这个:
A.map( x => B.count(y => y == x)))
答案 1 :(得分:3)
你可以这样做,idursun建议,它会工作,但可能效率不高,好像你先准备交叉点。如果B比A大得多,它将带来巨大的加速。 'intersect'方法具有更好的'big-O'复杂度,然后对B中A的每个元素进行线性搜索。
val A = Array("abc", "joia", "abas8", "09ma09", "oiam0")
val B = Array("gfdg", "89jkjj", "09ma09", "asda", "45645ghf", "dgfdg", "yui345gd", "6456ds", "456dfs3", "abas8", "sfgds")
val intersectCounts: Map[String, Int] =
A.intersect(B).map(s => s -> B.count(_ == s)).toMap
val count = A.map(intersectCounts.getOrElse(_, 0))
println(count.toSeq)
结果
(0, 0, 1, 1, 0)
答案 2 :(得分:0)
使用foldLeft构造作为A:
的每个元素的收益率 val A = List("a","b")
val B = List("b","b")
val C = for (a <- A)
yield B.foldLeft(0) { case (totalc : Int, w : String) =>
totalc + (if (w == a) 1 else 0)
}
结果:
C: List[Int] = List(0, 2)