scala list counting元素并从其他列表中查找索引

scala list counting元素并从其他列表中查找索引,scala,Scala,是否有人有一个很好的想法来实现这一点: //Input val sequenceRef = List("a","b","c","d") //no doublon val listToCount = List("b", "c", "b", "a") //possible doublon //Output val listOutput = List(1, 2, 1, 0) 1-->listToCount中有一个“a”,它位于listRef中的第一个标记处 2-->listTo

是否有人有一个很好的想法来实现这一点:

//Input
val sequenceRef = List("a","b","c","d")        //no doublon
val listToCount = List("b", "c", "b", "a")    //possible doublon

//Output
val listOutput = List(1, 2, 1, 0)
1-->listToCount中有一个“a”,它位于listRef中的第一个标记处
2-->listToCount中有两个b“,位于listRef中的第二个标记处
3-->listToCount中有一个“c”,它位于listRef中的第三个标记处
0-->listToCount中没有d

val result = sequenceRef.map(x => listToCount.count(_ == x))
println(result)
将为您提供:

List(1, 2, 1, 0)
将为您提供:

List(1, 2, 1, 0)

另一种使用中间
映射
的方法,以避免在内存中保留另一个集合为代价,对
sequenceRef
的每个元素进行
listToCount

scala> val sequenceRef = List("a","b","c","d")
sequenceRef: List[String] = List(a, b, c, d)

scala> val listToCount = List("b", "c", "b", "a")
listToCount: List[String] = List(b, c, b, a)

scala> val keysCount = listToCount.groupBy(identity).mapValues(_.length)
keysCount: scala.collection.immutable.Map[String,Int] = Map(b -> 2, a -> 1, c -> 1)

scala> sequenceRef.map(keysCount.getOrElse(_, 0))
res2: List[Int] = List(1, 2, 1, 0)

另一种使用中间
映射
的方法,以避免在内存中保留另一个集合为代价,对
sequenceRef
的每个元素进行
listToCount

scala> val sequenceRef = List("a","b","c","d")
sequenceRef: List[String] = List(a, b, c, d)

scala> val listToCount = List("b", "c", "b", "a")
listToCount: List[String] = List(b, c, b, a)

scala> val keysCount = listToCount.groupBy(identity).mapValues(_.length)
keysCount: scala.collection.immutable.Map[String,Int] = Map(b -> 2, a -> 1, c -> 1)

scala> sequenceRef.map(keysCount.getOrElse(_, 0))
res2: List[Int] = List(1, 2, 1, 0)

下次请以副本/可复制格式发布数据。下次请以副本/可复制格式发布数据。