3、Scalaアレイ関連の操作

1.固定長配列

val nums = new Array[Int](10)//10个整数的数组,所有元素初始化为0
val s = Array("hello","world")//长度为2,类型由Scala自行推断,因为给了初始值,所以不用写new
s(0) = "google" //元素的访问使用()而不是[]

2.可変長配列:配列バッファー

可変長配列の場合、Scalaの同等の構造は次のとおりです。ArrayBuffer

import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()//或者不写()改用new ,此处表示一个空的数组缓冲,准备存放整数
b+=1	//使用+=在尾端添加元素
b+=(1,2,3,4,5,6)	//在尾端添加多个元素,以括号包起来
b++=Array(8,12,13)	//可以用++=操作符在后面追加任何集合

b.trimEnd(5)	//移除最后5个元素

b.insert(2,6)	//在下标2之前插入
b.insert(2,1,2,3,1,3)	//在下标2前插入多个元素

b.remove(2)	//移除下标为2的元素
b.remove(2,3)//移除下标2开始的3个元素

b.toArray(1,1,2)	//此做法为当不确定自己要构建的Array要装多少个元素时,可以先使用ArrayBuffer,然后在转换为Array
//同理,也可以使用a.toBuffer将一个数组a转化为一个数组缓冲

注:任意の位置での要素の挿入または削除は効率的ではありません

3.配列と配列バッファーをトラバースします

配列または配列バッファをトラバースするためのスピリットリングに使用for(i <- 区间)

for(i<- 0 until a.length)//until类似于to,但是不包含a.length
	println(s"$i:${a(i)}")//s开头,字符串可以包含表达式但不能有格式化指令,拓展:row开头不会求值转义字符
设置每一步的步长
0 until a.length by 2//得到的结果是Range(0,2,4,6,8)

ヘビーエンドからトラバースを開始する場合は、ステップサイズを-1に設定します。

0 until a.length by -1

配列の添え字を使用せず、配列要素に直接アクセスします

for(elem <- a)
	println(elem)

4.配列変換

Scalaでは、なんらかの方法で変換するのは非常に簡単です。これらの変換操作は元の配列を変更しませんが、完全に新しい配列を作成します。

val a = Array(2,3,5,7,11)
val result = for(elem<-a) yield 2 *elem

ループにガードを追加することもできます

for(elem <-a if elem % 2 ==0)	yield 2*elem

しかし、通常は別の書き方

a.filter(_ % 2==0).map(2 * _)//可以用{}代替()

上記のように、新しい配列が作成されます。たとえば、元の配列を変更する場合(インデックスを使用して配列の添え字シーケンス取得できます

val positionToRemove = for(i<-a.indices if a(i) <0 )yields i
for(i <-positionToRemove.reverse) a.remove(i)
//另一种更好的方式是将要的元素复制到前面,然后截取指定个数的元素

5.一般的に使用されるアルゴリズム

max,min,sum,sorted,sortedWith(),qucikSort()
mkString("<",",",">")//分别表示前缀,分隔符,后缀

6.Scaladocを解釈する

今はあまり説明しないでください

7.多次元配列

タイプArray [Array [Double]]の配列を作成します

val matrix = Array.ofDim[Double](3,4)//三行四列
//访问元素的方式:martix(row)(column) = 42

不規則な配列を作成するには

val trangle = Array[Array[Int]](10)
for(i<-trangle.indices)
	trangle(i) = new Array[Int](i+1)

8.Javaとの相互運用性

JavaのString []配列は、JavaのObject []配列を期待するメソッドに渡すことができますが、Scalaはそのような自動変換を許可していません。
Object []配列を使用してメソッドを呼び出す場合は、型を手動で変換する必要があります

val a = Array("dadas","dasdad","assda","dadadas")
java.util.Arrays.binarySearch(a.asInstanceOf[Array[Object]],"breef")

この部分は明らかです

おすすめ

転載: blog.csdn.net/Cxf2018/article/details/109411368