scala配列の詳細

7812 ワード

1.初期化配列
配列を初期化するには、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)