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)
下次请以副本/可复制格式发布数据。下次请以副本/可复制格式发布数据。