2015年

6月

22日

Swift コレクション 配列(Array、Dictionary)作成、追加、置換、挿入、削除

コレクション

Objective-C にはオブジェクトの集合を扱うためのクラスが6つ用意されています。これらのクラスのことをコレクションと呼びます。コレクションを大きく分けると次の3つになります。

Array
 Array とは配列のことです。ただし C 言語の配列と違う点は NSArray では型の指定はできません。型としてはオブジェクト型の配列としてのみ扱われます。他の型の配列を使いたい場合はそのまま C 言語の配列を使えば良いということになります。

Dictionary
 Array (配列) は各要素 (オブジェクト) を Index (添え字) で識別します。添え字とは 0 から始まる続き番号のことです。それに対して Dictionary (辞書) は各要素 (オブジェクト) をキー (名前) で識別します。要素の事を値 (Value) と呼び一組の値とキーのペアをエントリーと呼びます。エントリーはいくつでも登録することができますが NSDicitonary も NSArray と同じく各要素およびキーはオブジェクトでなければなりません。キーには普通 NSString (文字列オブジェクト) が使われます。


Objective-Cの場合はこちら

ViewController.swif

import UIKit


class ViewController: UIViewController {


    // テキスト表示

    @IBOutlet weak var teString: UITextView!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }


    // 配列[個数]ボタンを押した時

    @IBAction func proc00(sender: UIButton) {

        

        self.teString.text = nil

        

        // 整数配列作成

        let arr01:[Int] = [10, 20, 30, 40, 50]

        println("整数配列:\(arr01)")

        

        // 文字配列作成

        let arr02:[String] = ["あいうえお", "かきくけこ"]

        println("文字配列:\(arr02)")

        

        // 同じ値の初期値作成

        let arr03:[Int] = Array(count:3, repeatedValue:10) // [10, 10, 10]

        println("同じ値の初期値:\(arr03)")

        

        // 空の配列

        let arr04:[Int] = [] // 空の配列

        println("空の配列(数字):\(arr04)")

        

        // 空の配列

        let arr05:[String] = [String]() // 空の配列

        println("空の配列(文字):\(arr05)")

        

        // 型は初期値から推測されるので、初期値を与える場合は型を明示する必要はありません。

        let arr06 = ["勇者", "戦士", "魔法使い", "僧侶"]

        let arr07 = [10, 20, 30, 40, 50]

        

        self.teString.text = self.teString.text.stringByAppendingFormat

                                                            ("整数配列:\(arr01)\n")

        self.teString.text = self.teString.text.stringByAppendingFormat

                                                            ("文字配列:\(arr02)\n")

        self.teString.text = self.teString.text.stringByAppendingFormat

                                                            ("同じ値の初期値:\(arr03)\n")

        self.teString.text = self.teString.text.stringByAppendingFormat

                                                            ("空の配列(数字):\(arr04)\n")

        self.teString.text = self.teString.text.stringByAppendingFormat

                                                            ("空の配列(文字):\(arr05)")

    }

    // 配列[個数]ボタンを押した時

    @IBAction func proc01(sender: UIButton) {

        

        self.teString.text = nil

        

        // 配列作成

        let arr:[Int] = [10, 20, 30, 40, 50]

 

        // 要素数

        let cnt:Int = arr.count // 5

        println("配列の個数:\(cnt)")

        

        self.teString.text = self.teString.text.stringByAppendingFormat("配列個数:\(cnt)")

        

        //各件数

        var cnt1:Int = arr.capacity // 5

        var cnt2:Int = arr.startIndex // 0

        var cnt3:Int = arr.endIndex // 5

        

    }


    // 配列[要素]を押した時

    @IBAction func proc02(sender: AnyObject) {


        self.teString.text = nil

        

        // 配列作成(別記1)

        let arr: [Int] = [10, 20, 30]

        //各データを取得

        let arr01:Int = arr[0] // 10

        let arr02:Int = arr[1] // 20

        let arr03:Int = arr[2] // 30

        

        println("0番目の要素:\(arr01)")

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("0番目の要素:\(arr01)")


    }

    

    // 配列[範囲]ボタンを押した時

    @IBAction func proc03(sender: AnyObject) {

        

        self.teString.text = nil

        

        // 配列作成

        let arr:[Int] = [10, 20, 30, 40, 50]

        

        // 配列の範囲

        var arr01 = arr[1...2] // [20, 30]

        println("配列の範囲:\(arr01)")

        

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("配列の範囲:\(arr01)")

    }

    

    // 配列[全要素]ボタンを押した時

    @IBAction func proc04(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        let arr01:[Int] = [10, 20, 30, 40, 50]

        

        // 要素数

        let cnt01:Int = arr01.count // 5

        

        // 値を取得

        for (var i = 0; i < cnt01 ; i++) {

            println("整数配列の全要素:\(arr01[i])\n") // 10, 20, 30, 40, 50

            self.teString.text = self.teString.text.

                                 stringByAppendingFormat("整数配列の全要素:\(arr01[i])\n")

        }

        

        

        ///////////

        // 配列作成

        let arr02:[String] = ["あいうえお", "かきくけこ"]

        // 要素数

        let cnt02:Int = arr02.count

        

        // 値を取得

        for (var i = 0; i < cnt02 ; i++) {

            println("文字配列の全要素:\(arr02[i])\n") // "あいうえお", "かきくけこ"

            self.teString.text = self.teString.text.

                                 stringByAppendingFormat("文字配列の全要素:\(arr02[i])\n")

        }


        ///////////

        // 配列作成

        let arr03:[String] = ["1stだだ", "2nd", "3rd"]

        // 要素数

        let cnt:Int = arr03.count

        

        ///////////////////

        // 値を取得(個別取得)

        for (var i = 0; i < cnt ; i++) {

            var val:String = arr03[i]

            println("個別取得:\(val)") // "1stだだ", "2nd", "3rd"

            self.teString.text = self.teString.text.

                                 stringByAppendingFormat("文字配列の個別取得:\(val)\n")

        }

        

        ///////////////////

        // 値の取得(簡易取得)

        println("簡易取得:", arr03)

        self.teString.text = self.teString.text.

                                 stringByAppendingFormat("文字配列の簡易取得:\(arr03)\n")

        

        //////////////////////

        // 値の取得(高速列挙取得)

        // データの最後まで読み込む 要素の数まで繰り返す

        for value in arr03 {

            println("高速列挙取得:\(value)") // "1stだだ", "2nd", "3rd"

            self.teString.text = self.teString.text.

                               stringByAppendingFormat("文字配列の高速列挙取得:\(value)\n")

        }

        

        //////////////////////

        // 値の取得(enumerate

        // (要素番号,要素を一時的に入れる変数)in enumerate(配列名)

        for (index,val) in enumerate(arr03){

            println("要素:[\(index)]=\(val)") // [0]=1stだだ, [1]=2nd, [2]=3rd

            self.teString.text = self.teString.text.

                              stringByAppendingFormat("要素:[\(index)]=\(val)\n")

        }

    }

    

    // 配列[追加]ボタンを押した時

    @IBAction func proc05(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var arr = ["1stだだ", "2nd", "3rd"]

        // 要素の追加 append

        arr.append("4th")   // ["1stだだ", "2nd", "3rd", "4th"]

        println("追加 append:\(arr)")

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("追加 append:\(arr)\n")

        

        // 要素の追加 +=

        arr += ["5th"]

        println("追加 +=:\(arr)")

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("追加 +=:\(arr)\n")

        

        // 要素の追加 atIndex

        arr.insert("3nd3nd", atIndex:3)

        println("追加 atIndex:\(arr)")

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("追加 atIndex:\(arr)")

    }

    

    // 配列[置換]ボタンを押した時

    @IBAction func proc06(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var arr = ["1stだだ", "2nd", "3rd"]

        // 要素の置換

        arr[2] = "3r3rd" // ["1stだだ", "2nd", "3r3rd"]

        self.teString.text = self.teString.text.stringByAppendingFormat("置換:\(arr)")

    }

    

    // 配列[削除]ボタンを押した時

    @IBAction func proc07(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var arr = ["1stだだ", "2nd", "3rd"]

        // 要素の削除

        arr.removeLast() // 最後の要素を削除 "3rd"

        println("削除:\(arr)")

        self.teString.text = self.teString.text.stringByAppendingFormat("削除:\(arr)")

    }

    

    // 配列[全削除]ボタンを押した時

    @IBAction func proc08(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var arr = ["1stだだ", "2nd", "3rd"]

        // 要素の全削除

        arr.removeAll()

        println("全削除:\(arr)")

        self.teString.text = self.teString.text.stringByAppendingFormat("全削除:\(arr)")

    }

    

    // 配列ソート[昇順]ボタンを押した時

    @IBAction func proc09(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var arr = [50, 30, 10, 40, 20]

        arr.sort({ $0 < $1})            // 昇順にソート

        println("昇順にソート:\(arr)")

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("昇順にソート:\(arr)")

    }

    

    // 配列ソート[降順]ボタンを押した時

    @IBAction func proc10(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var arr = [50, 30, 10, 40, 20]

        arr.sort({ $0 > $1})            // 降順にソート

        println("降順にソート:\(arr)")

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("降順にソート:\(arr)")

    }

    

    // 辞書データ(Dictionary)作成

    @IBAction func proc11(sender: AnyObject) {

        

        self.teString.text = nil

        

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        println("辞書データ:\(dic01)") // [key01: 1st, key03: 3st, key02: 2st]

        self.teString.text = self.teString.text.

                                    stringByAppendingFormat("辞書データ:\(dic01)\n")

        

        var dic02 = ["key01":1, "key02":2, "key03":3]

        println("辞書データ:\(dic02)") // [key01: 1, key03: 3, key02: 2]

        self.teString.text = self.teString.text.

                                    stringByAppendingFormat("辞書データ:\(dic02)")

    }

    

    // 辞書データ(Dictionary)個数

    @IBAction func proc12(sender: AnyObject) {

        

        self.teString.text = nil

        

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        var cnt = dic01.count

        println("個数:\(cnt)") // 3

        self.teString.text = self.teString.text.stringByAppendingFormat("個数:\(cnt)")

        

    }

    

    // 辞書データ(Dictionary)取得

    @IBAction func proc13(sender: AnyObject) {

        

        self.teString.text = nil

        

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        var val = dic01["key02"]

        println("個別取得 key02:\(val)") //

        self.teString.text = self.teString.text.

                                  stringByAppendingFormat("個別取得 key02:\(val)\n")

        

        // if文で見つかるかのチェック 見つからない場合はnilが返ってきます。

        if let tmpVal = dic01["key02"]{

            println("find=\(tmpVal)")

            self.teString.text = self.teString.text.

                                  stringByAppendingFormat("find=\(tmpVal)")

        } else {

            println("not found")

            self.teString.text = self.teString.text.stringByAppendingFormat("not found")

        }

    }

    

    // 辞書データ(Dictionary)全取得

    @IBAction func proc14(sender: AnyObject) {

        

        self.teString.text = nil

        

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        for (key, val) in dic01 {

            println("データ[\(key)]=\(val)")

            self.teString.text = self.teString.text.

                                  stringByAppendingFormat("データ[\(key)]=\(val)\n")

        }

    }

    

    // 辞書データ(Dictionary)追加

    @IBAction func proc15(sender: AnyObject) {

        

        self.teString.text = nil

        

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        dic01["key04"] = "4st"

        println("追加:\(dic01)")

        self.teString.text = self.teString.text.stringByAppendingFormat("追加:\(dic01)")

    }

    

    // 辞書データ(Dictionary)更新

    @IBAction func proc16(sender: AnyObject) {

        

        self.teString.text = nil

        

        ///////////

        // 配列作成

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        // 要素の置換

        dic01["key03"] = "3r3st" // ["1stだだ", "2nd", "3r3rd"]

        self.teString.text = self.teString.text.stringByAppendingFormat("置換:\(dic01)")


    }

    

    // 辞書データ(Dictionary)削除

    @IBAction func proc17(sender: AnyObject) {

        

        self.teString.text = nil

        

        var dic01 = ["key01":"1st", "key02":"2st", "key03":"3st"]

        dic01 .removeValueForKey("key01")

        println("削除:\(dic01)")

        self.teString.text = self.teString.text.stringByAppendingFormat("削除:\(dic01)")

        

    }

}

GitHub CollectionSwift

  

目 次