scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
for (i <- 0 until (a.length, 2)) {
if (i + 1 < a.length) {
var tmp = a(i)
a(i) = a(i+1)
a(i+1) = tmp
scala> a
res3: Array[Int] = Array(2, 1, 4, 3, 5)
用yield
生成新数组
scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
for (i <- 0 until a.length) yield {
if (i % 2 == 0) {
if (i + 1 < a.length) a(i+1) else a(i)
} else {
if (i - 1 >= 0) a(i-1) else a(i)
res2: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 1, 4, 3, 5)
给定一个数组,产出新的数组,正值在前;0和负数在后,两者都保持原顺序不变。
scala> val a = Array(0,1,-2,-3,4,5,-6)
a: Array[Int] = Array(0, 1, -2, -3, 4, 5, -6)
scala> a.filter(_ > 0) ++ a.filter(_ <= 0)
res5: Array[Int] = Array(1, 4, 5, 0, -2, -3, -6)
scala> val b = Array(0,1.44,-2.0,-3.1,4,5.99,-6)
b: Array[Double] = Array(0.0, 1.44, -2.0, -3.1, 4.0, 5.99, -6.0)
scala> b.sum / b.length
res7: Double = 0.04714285714285715
Array[Int]
和ArrayBuffer[Int]
都可以用reverse
方法反序排列。此题的用意是神马?难道Scala 2.8版本有什么特别吗?
数组排重用ArrayOps.distinct
scala> a
res17: Array[Int] = Array(1, 2, 4, 3, 4, 5)
scala> a.distinct
res18: Array[Int] = Array(1, 2, 4, 3, 5)
收集负值下标,反序,去掉最后一个。
val indexes = for (i <- 0 until a.length if a(i) < 0) yield i
for (i <- indexes.reverse.init) a.remove(i)
scala> val flavors =
SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]
flavors: java.awt.datatransfer.SystemFlavorMap =
java.awt.datatransfer.SystemFlavorMap@1365301
scala> import scala.collection.mutable.Buffer
import scala.collection.mutable.Buffer
scala> import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.JavaConversions.asScalaBuffer
scala> val b: Buffer[java.lang.String] = flavors.getNativesForFlavor(DataFlavor.imageFlavor)
b: scala.collection.mutable.Buffer[java.lang.String] = Buffer(image/jpeg,
image/png, image/x-png, image/gif, PNG, JFIF)