libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSArray/NSMutableArrayとオブジェクトの配列 (2/6)

作成:2011-02-15 09:23
更新:2011-11-13 21:15

■NSArrayの要素を操作する

作成したNSArrayインスタンスは、配列と同様にインデックス番号を割り振られて要素を管理しています。

保管している個々の要素を取り出すなどして利用するためには、インデックスを指定してオブジェクトを取り出すメソッドを利用します。
変数 = [《NSArray*》
    objectAtIndex:《NSUInteger》];
引数にはNSUInteger値を指定しますが、既に何度か登場したように、これは普通の整数値を指定すればOKです。この他、逆に「保管しているオブジェクトのインデックス番号がいくつか」を得るようなメソッドもあります。
変数 = [《NSArray*》 indexOfObject:《id》];
引数に指定したオブジェクトがNSArray内にあればそのインデックス番号を返します。もし見つからなければ、-1が返されます。――この他、オブジェクトを操作するには「要素の数」を調べるメソッドも必要でしょう。これは以下のようになっています。
変数 = [《NSArray*》 count];
返値はNSUInteger値ですが、まぁ普通の整数と考えてよいでしょう。これらが分かれば、NSArrayの全要素を操作するような処理が作成できるようになります。
        NSArray* arr = [NSArray arrayWithObjects:@"Hello",
               @"Welcome",@"Bye",nil];
        NSUInteger n = [arr count];
        for(int i = 0;i < n;i++){
            NSLog(@"%i:%@",i,[arr objectAtIndex:i]);
        }
ざっとこんな感じですね。NSArrayにいくつかのNSStringを保管しておき、その全要素をNSLogで出力しています。NSArrayの値を取り出して利用するのは、このように非常に簡単です。

では、保管した値を変更するには? これは、実は「できない」のです。NSArrayは、「変更できない配列」です。というと「えっ? そんな馬鹿な!」と思うかも知れません。――実は、Objective-Cに用意されている「配列のように多数のオブジェクトを管理するためのクラス(一般にコレクションと呼ばれるものです)」は、「内容を変更できないもの」と「可変のもの」の2種類のクラスが用意されているのです。

配列の場合、固定のものが「NSArray」クラス、可変のものは「NSMutableArray」クラスになります。ですから、保管している内容をいろいろ操作したい場合は、NSMutableArrayを利用すればいいのです(これについては、後で説明します)。NSArrayは、あくまで「値を見るだけ」です。変更はできません!

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※NSArrayの全要素を出力する

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray* arr = [NSArray arrayWithObjects:@"Hello",
               @"Welcome",@"Bye",nil];
        NSUInteger n = [arr count];
        for(int i = 0;i < n;i++){
            NSLog(@"%i:%@",i,[arr objectAtIndex:i]);
        }
    }
    return 0;
}

※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る