scala之数组

目录

 

一:Array

二:ArrayBuffer

三:for循环to和until遍历Array / ArrayBuffer

四:相关数组功能点

 


一:Array


1.Scala 和  Java 的数据是相通的
Scala数组的底层实际上是Java数组

2.创建数组

(1)val a = new Array[Int](10)

(2)简写:
    Array.apply() 的方法去声明
    然后简化为 Array() 即可
    
3.数据类型的赋予:
    手动赋予泛型
    Scala的自动识别值的情况
    
4.访问数组?
例子:var(0)   数组变量  +  () +  值的下标

5.赋予值:
例子: var(0) = 1

 

二:ArrayBuffer

1.定义:ArrayList这种长度可变的集合类

2.声明方式:
val b = ArrayBuffer[Int]();
与上面一样

3.添加普通元素:
b += 1;

4.添加其他集合中的所有元素
b ++= Array(6,7,8,9)

5.尾部截断指定个数的元素
b.trimEnd(5)

6.指定位置插入元素
b.insert(5,6)  第一个是下标,第二个是值

7.移除指定位置的元素
b.remove(1)

8.Array与ArrayBuffer可以互相进行转换
var b = new ArrayBuffer[Int]();
b.toArray;

var a = Array();
a.toBuffer 

 

三:for循环to和until遍历Array / ArrayBuffer

1.普通遍历:for (i <- 0 until b.length) println(b(i))
 
2.跳跃遍历:for(i <- 0 until (b.length, 2)) println(b(i))
 
3.从尾部遍历:for(i <- (0 until b.length).reverse) println(b(i))
 
4.使用“增强for循环”遍历:for (e <- b) println(e)


四:数组的简单常用算法
1.数组元素求和:
 val a = Array(1,2,3,4,5)
 a.sum 
 
2.数组最大值:
 a.max
 
3.数组进行排序:
 scala.util.Sorting.quickSort(a)
 
 排序只适用于 Array数组,不适用于 ArrayBuffer
 
4.获取数组中所有元素内容:
 a.mkString
 a.toString
 b.toString
 b.mkStrig
 
 比较:mkString和toString相比,后可接参数mkString(",") ,进行自定义的格式划分

5.yield 的使用 返回遍历的值
(1)Array
val a = Array(1, 2, 3, 4, 5)
val a2 = for (ele <- a) yield ele * ele

(2)ArrayBuffer
val b = ArrayBuffer[Int]()
b += (1, 2, 3, 4, 5)
val b2 = for (ele <- b) yield ele * ele

(3)守卫函数 if(放在for循环之中)
val a3 = for (ele <- a if ele % 2 == 0) yield ele * ele 


(4)scala 的函数式编程;filter,map 函数的使用
a.filter(_ % 2 == 0).map(2 * _)  ————》 其中 " _ " 就表示a中的每一个元素

6.只保留数组中的第一个负数
val a = ArrayBuffer[Int]()
a += (1, 2, 3, 4, 5, -1, -3, -5, -9)

方法一:
var foundFirstNegative = false
var arrayLength = a.length
var index = 0
while (index < arrayLength) {
  if (a(index) >= 0) {
    index += 1
  } else {
    if (!foundFirstNegative) { foundFirstNegative = true; index += 1 }
    else { a.remove(index); arrayLength -= 1 }
  }

特点:// 每发现一个第一个负数之后的负数,就进行移除,性能较差,多次移动数组

方法二:
var foundFirstNegative = false
val keepIndexes = for (i <- 0 until a.length if !foundFirstNegative || a(i) >= 0) yield {
  if (a(i) < 0) foundFirstNegative = true
  i
}
for (i <- 0 until keepIndexes.length) { a(i) = a(keepIndexes(i)) }
a.trimEnd(a.length - keepIndexes.length)
特点: 先记录下所有不需要移除的元素的索引
       稍后一次性进行移除

 

你可能感兴趣的:(#,scala语法)