scala配列の詳細
7812 ワード
1.初期化配列
配列を初期化するには、javaと同じように、newキーワードを使って、データタイプと配列長を指定します。
2.初期化行列
長い可変配列が必要です。例えば、javaでは、よく使われているのがArayListです。Scalaには、アラビバッファーという神器があります。ArayBufferの使い方をよく見るために、直接ソースを出します。
ArayとArayBufferの間で相互変換が必要なら、操作も簡単です。
集合遍歴は最も一般的な方法です。普通はfor循環で解決できます。
配列はよく使われています。特に使いやすい操作も並んでいます。
yieldを使って新しい配列を作成します。
配列を初期化するには、javaと同じように、newキーワードを使って、データタイプと配列長を指定します。
def test() = {
val arr = new Array[Int](3)
arr.foreach(x => print(x + ","))
}
上のコードがrunで起きたら:0,0,0,
newキーワードを使わずに、初期値を直接提供しても良いです。 def test() = {
val arr = Array[Int](3)
arr.foreach(x => print(x + ","))
}
注意この時runが起きたら、結果は:3,
上の例を通して、newキーワードがあるかどうかが分かりやすく、大きな違いがあります。2.初期化行列
長い可変配列が必要です。例えば、javaでは、よく使われているのがArayListです。Scalaには、アラビバッファーという神器があります。ArayBufferの使い方をよく見るために、直接ソースを出します。
def test() = {
val arrBuffer = ArrayBuffer[Int]()
//
arrBuffer += 1
//
arrBuffer += (2,3,4)
//
arrBuffer ++= Array(5,6,7)
printArr(arrBuffer) // 1,2,3,4,5,6,7,
//
arrBuffer.trimEnd(1)
//
arrBuffer.trimStart(1)
printArr(arrBuffer) // 2,3,4,5,6,
//
arrBuffer.insert(1,0)
printArr(arrBuffer) // 2,0,3,4,5,6,
//
arrBuffer.insert(2,1,2,3)
printArr(arrBuffer) // 2,0,1,2,3,3,4,5,6,
//
arrBuffer.remove(0)
printArr(arrBuffer) // 0,1,2,3,3,4,5,6,
//
arrBuffer.remove(0,4)
printArr(arrBuffer) // 3,4,5,6,
}
def printArr(arrBuffer: ArrayBuffer[Int]) = {
arrBuffer.foreach(x => print(x + ","))
println()
}
3.ArayとArayBufferの相互変換ArayとArayBufferの間で相互変換が必要なら、操作も簡単です。
def test() = {
val arrayBuffer = ArrayBuffer(1,2,3)
val res = arrayBuffer.toArray
val array = Array[Int](5,6,7)
val buf = array.toBuffer
}
4.配列エルゴード集合遍歴は最も一般的な方法です。普通はfor循環で解決できます。
def test() = {
val array = Array("a", "b", "c", "d")
for(i 0 until array.length)
println(i + ":" + array(i))
}
コードrunを起こしたら、次のように出力します。0:a
1:b
2:c
3:d
ステップサイズを2に調整したい場合:for(i 0 until (array.length,2))
逆順を達成したいなら、for(i 0 until (array.length)).reverse)
Javaには強化型forサイクルがあり、scalaには自然にこの便利な操作が提供されています。for(item array)
5.いくつかの実用的な操作配列はよく使われています。特に使いやすい操作も並んでいます。
def test() = {
val array = Array(1,2,3,4,5)
println(array.sum) //15
println(array.max) //5
println(array.min) //1
println(array.mkString("-")) //1-2-3-4-5,
println(array.mkString("(", "-",")")) //(1-2-3-4-5)
}
6.その他のいくつかの操作yieldを使って新しい配列を作成します。
def test() = {
val array = Array(2, 4, 5, 6, 7)
val res = for(item array if item % 2 == 0) yield item * 2
res.foreach(x => print(x + ",")) // 4,8,12,
}
上の操作は以下のコードに相当します。array.filter(_ % 2 == 0).map(_ * 2)