val m = Array(10,20,30,30,50,60,70,80) groupBy ( s => s %30 == 0)
m(true).map { kv => println(kv) }
打印值30,30,60
我希望打印索引,即2,3,5。
我该怎么做?
答案 0 :(得分:8)
val m = Array(10,20,30,30,50,60,70,80).zipWithIndex.groupBy(s =>
s._1 % 30 == 0).map(e => e._1 -> (e._2.unzip._2))
仅供参考,如果您只想要true
值,那么您可以使用@ missingfaktor的方法,同样可以partition
这个:
val m = Array(10, 20, 30, 30, 50, 60, 70, 80).zipWithIndex.partition(s =>
s._1 % 30 == 0)._1.unzip._2
答案 1 :(得分:6)
Array(10, 20, 30, 30, 50, 60, 70, 80)
.zipWithIndex
.collect { case (element, index) if element % 30 == 0 => index }
// Array[Int] = Array(2, 3, 5)
答案 2 :(得分:6)
这是另一种方法:
Array(10,20,30,30,50,60,70,80).zipWithIndex.filter{ _._1 % 30 == 0 }.map{ _._2 }
我发现.map{ _._2 }
比.unzip._2
更容易理解,但也许这只是我。有趣的是上面的回报:
Array[Int] = Array(2, 3, 5)
虽然解压缩变体返回:
scala.collection.mutable.IndexedSeq[Int] = ArrayBuffer(2, 3, 5)
答案 3 :(得分:1)
这是一种更直接的方式,
val m = Array(10,20,30,30,50,60,70,80).zipWithIndex.filter(_._1 % 30 == 0).unzip
将值和索引作为一对获得,(ArrayBuffer(30, 30, 60),ArrayBuffer(2, 3, 5))
您只能使用
m._2.foreach(println _)
答案 4 :(得分:0)
val a=Array(10,20,30,30,50,60,70,80)
println( a.indices.filter( a(_)%30==0 ) )