相信大家在开发当中数组这个集合用到的频率还是相当多的,因此有必要好好学习它。
下面,就跟随我的脚步来了解和学习使用Scala中的数组。
数组定义:
var 数组名:Array[数据类型] = new Array[数据类型](数组长度);
例如:
val arrA: Array[String] = new Array[String](10);
这儿就定义了一个String类型长度为10的数组。
上面还可以简写为以下方式:
val arrB = new Array[String](10);数组常规操作:
val arrC = Array[String]();
val arrD = Array[String]("A", "B", "C");
val arrE = Array(1, 2, 3);
遍历数组:
to方式:
for (i <- 0 to arrD.length - 1)注: scala在for循环中对循环变量i的赋值用了“ <- ”符号,Scala数组和其他数组一样下标从0开始。to 能取到两个临界点,所以length要执行减1的操作。
{
println(arrD(i));
}
注:这里的0 to arrD.length本质上是一个方法,这个方法返回的是一个Range类型,它等价于下面的代码
(0).to(arrD.length);因为 在scala中一切皆是对象所以,这里的1就是一个对象,他有一个to方法,返回一个Range的数据类型。
until方式:
for (i <- 0 until arrD.length)与to方式不同的是,until方式 不包括最后一个元素,即不用执行减1的操作。当然我个人也推荐使用这种方法,避免因为粗心造成下标越界。
{
println(arrD(i));
}
Scala的foreach方式:
for (value: String <- arrD)与to和until方式不同的是,to和until方式是通过遍历下标的方式进行元素的查找,而 foreach方式是直接遍历数组的元素。
{
println(value);
}
for语句与if语句的混合条件循环:
在Java中,我们可能只需要循环取出某个符合条件的值,这时候我们一般会才有如下的方式书写:
static String arrD[] = new String[]{"A", "B", "C"};但是Scala中,for和if可以写到一起,如下:
public static void main(String[] args)
{
for (String arr : arrD)
{
if (arr.equals("A"))
{
System.out.println(arr);
}
}
}
for (value: String <- arrD if value.equals("A"))是不是更加简洁?有朋友就会问,那要是有多个条件呢?当然强大的Scala也支持,如下:
{
println(value);
}
for (value: Int <- arrE if value < 3; if value > 1)当有多个条件时,只需要使用 " ; " 进行分割即可,类似Java中的&&。
{
println(value);
}
数组元素的访问:
在Java中,我们通常采用arr[i]的方式进行访问,但是Scala中使用arr(i) 小括号加下标的方式进行访问。
val 的作用:
这儿啰嗦一句,那就是 val 的作用:在Scala中,使用 val 定义变量,那么这个变量就不能重新赋值,但变量指向的的对象内部却仍可以改变。
什么意思呢?下面看一个程序你就会明白,如下:
val myarr = Array("A", "B", "C");
val num=100;
def main(args: Array[String]): Unit =
{
myarr(1)="D";//正确
num=101;//错误
for (i <- 0 to myarr.length - 1)
{
println(myarr(i))
}
}
结果:A D C好了,这当是临时穿插的一个知识点,现在让我们回到Array的学习当中来。
Scala Array的一些知识点:
(1)将一个Int类型的数组中的所有元素执行同样的操作,如乘以10,如下:
val arrG = arrE.map(_ * 10);(2) 使用reverse进行数组的倒叙。
valarrH = arrE.reverse;结果:
倒叙前:123
倒叙后:321
(3)两个数组进行相加,使用"++:",如下:
val arrI = arrE ++: arrF;当然我们也可以相加两个不同类型的数组,如下:
val arrI = arrE ++: arrD;
for (i <- 0 until arrI.length)
{
print(arrI(i));
}
结果:
123ABC
看到这儿你是不是就会想,那我们定义的时候是不是也可以将不同类型的数据放到一个数组里面啊。当然这也是可以的。
(4)向数组最前面添加一个元素。使用“+:”操作符。如下:
val arrJ = 1 +: arrE;(5)向数组最后添加一个元素。使用“:+”操作符。如下:
val arrJ = arrE :+ 2;
(6)将所有的数组元素序列化为一个StringBuilder。如下:
val a:StringBuilder = new StringBuilder();结果:ABC
val b:StringBuilder = arrD.addString(a);
println(b);