给出一个输入序列:
Array[Int] = Array(0, 1, 0, 2, 1, 0)
我想要一个列表,该列表为我提供每个条目时间的索引,即序列中每个条目的次数。输出为:
Array[Int] = Array(1, 3, 3, 4)
有一个索引1实例,两个索引3实例,一个索引4实例。如何在scala中编写一个函数来做到这一点?
这是一次尝试,但我
val func1 = (cnt: Int, idx: Int) => Array.fill(cnt)(idx)
countarray.zipWithIndex.map(func1)
func1: (Int, Int) => Array[Int] = <function2>
<console>:132: error: type mismatch;
found : (Int, Int) => Array[Int]
required: ((Int, Int)) => ?
seq_of_vectors.map(_.numNonzeros).zipWithIndex.map(func1)
答案 0 :(得分:4)
您非常亲密。
arr.zipWithIndex.flatMap{case (rep,idx) => Array.fill(rep)(idx)}
使用flatMap()
,以便将所有中间Array
展平为一个Array
结果。