Objective-Cにおける配列(NSArrayとNSMutableArray)の一般的な使い方

16226 ワード

NSArrayとNSMutableArrayの一般的な使い方
ラベル(スペース区切り):一般的な使用法
一、NSArrayの常用用法
  • 可変配列です.

  • 1、配列の作成
    1)初期作成
    - (instancetype)initWithObjects:(ObjectType)firstObj, …
    NSArray *arr1 = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",nil];
    NSLog(@"arr1 = %@",arr1);

    実行結果
    2016-02-25 15:17:39.393 OC_NSArray NSMutableArray[1822:112530] arr1 = (
        a,
        b,
        c
    )

    2)コンビニエンス・コンストラクタの使用
    + (instancetype)arrayWithObjects:(ObjectType)firstObj, …
    NSArray *arr2 = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    NSLog(@"arr2 = %@",arr2);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] arr2 = (
        1,
        2,
        3
    )

    3)文字数(最後にnilを追加する必要はありません)
    NSArray *arr3 = @[@"mike",@"joe",@"kitty"];
    NSLog(@"arr3 = %@",arr3);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] arr3 = (
        mike,
        joe,
        kitty
    )
  • 注意:nilは配列終了のフラグとして手動で追加しないでください.

  • 2、配列中の要素の数を取得する
    @property (readonly) NSUInteger count
    NSUInteger c1 = arr1.count;
    NSLog(@"c1 = %lu",c1);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] c1 = 3

    3、配列に指定された下付き文字の要素を取得する
    1)初期取得
    - (ObjectType)objectAtIndex:(NSUInteger)index
    NSString *obj1 = [arr3 objectAtIndex:0];
    NSLog(@"obj1 = %@",obj1);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] obj1 = mike

    2)字面量取得
    NSLog(@"arr3[2] = %@",arr3[2]);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] arr3[2] = kitty

    4、配列に要素が含まれているかどうかを判断する
    - (BOOL)containsObject:(ObjectType)anObject
    BOOL b1 = [arr1 containsObject:@"c"];
    NSLog(@"b1 = %d",b1);
    BOOL b_1 = [arr1 containsObject:@"m"];
    NSLog(@"b_1 = %d",b_1);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] b1 = 1
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] b_1 = 0

    5、配列内の要素のインデックス(つまり下付き)を返します.
  • 注意:配列に重複要素がある場合は1番目を返し、この数がない場合は未知数
  • を返します.
    - (NSUInteger)indexOfObject:(ObjectType)anObject
    NSUInteger n1 = [arr1 indexOfObject:@"c"];
    NSLog(@"n1 = %lu",n1);
    NSUInteger n_1 = [arr1 indexOfObject:@"l"];
    NSLog(@"n_1 = %lu",n_1);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] n1 = 2
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] n_1 = 9223372036854775807

    6、所定の文字列に従って文字列を分割する
    - (NSArray
    NSString *str1 = @"www.lanou3g.com";
    NSArray *arr4 = [str1 componentsSeparatedByString:@"."];
    NSLog(@"arr4 = %@",arr4);

    実行結果
    2016-02-25 15:17:39.394 OC_NSArray NSMutableArray[1822:112530] arr4 = (
        www,
        lanou3g,
        com
    )

    7、配列内の要素を所与の文字列形式に従って完全な文字列オブジェクトにつづる
    - (NSString )componentsJoinedByString:(NSString )separator
    NSString *str2 = [arr4 componentsJoinedByString:@"/"];
    NSLog(@"str2 = %@",str2);

    実行結果
    2016-02-25 15:17:39.395 OC_NSArray NSMutableArray[1822:112530] str2 = www/lanou3g/com

    8、小練習
    所定の文字列のすべての*を抽出する.jpg
    NSString *string = @"http://www.imanhua.com/Cover/2011-10/hyrz.jpg&http://www.imanhua.com/Cover/2011-09/op.jpg&http://www.imanhua.com/Cover/2012-04/yjdwb.jpg";
    NSArray *netAddress = [string componentsSeparatedByString:@"&"];
    NSLog(@"%@",netAddress);
    for(int i = 0; i < netAddress.count; i++){
        NSArray *picArr = [netAddress[i] componentsSeparatedByString:@"/"];
        NSLog(@"%@",picArr[picArr.count - 1]); // count-1          
    }

    実行結果
    2016-02-25 15:17:39.395 OC_NSArray NSMutableArray[1822:112530] (
        "http://www.imanhua.com/Cover/2011-10/hyrz.jpg",
        "http://www.imanhua.com/Cover/2011-09/op.jpg",
        "http://www.imanhua.com/Cover/2012-04/yjdwb.jpg"
    )
    2016-02-25 15:17:39.395 OC_NSArray NSMutableArray[1822:112530] hyrz.jpg
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] op.jpg
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] yjdwb.jpg

    二、NSMutableArrayの常用用法
  • 可変配列
  • 1、配列の作成
    1)初期作成
    - (instancetype)initWithCapacity:(NSUInteger)numItems
    NSMutableArray *marr1 = [[NSMutableArray alloc] initWithCapacity:10];

    2)コンビニエンス・コンストラクタの作成
    + (instancetype)arrayWithCapacity:(NSUInteger)numItems
    NSMutableArray *marr2 = [NSMutableArray arrayWithCapacity:10];

    4)字面量作成
  • の字面量で作成する配列は可変であるため、ここで使用する必要がある.mutableCopy
  • NSMutableArray *marr3 = @[@"a",@"b",@"c"].mutableCopy;

    2、要素の追加
    - (void)addObject:(ObjectType)anObject
    [marr1 addObject:@"a"];
    [marr1 addObject:@"b"];
    [marr1 addObject:@"c"];
    [marr1 addObject:@"x"];
    [marr1 addObject:@"e"];
    NSLog(@"marr1 = %@",marr1);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr1 = (
        a,
        b,
        c,
        x,
        e
    )

    3、配列に指定された位置にオブジェクトを挿入する
    - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index
    [marr1 insertObject:@"x" atIndex:2];
    NSLog(@"marr1 = %@",marr1);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr1 = (
        a,
        b,
        x,
        c,
        x,
        e
    )

    4、配列からオブジェクトを削除する
  • (配列に重複するオブジェクトがある場合はすべて削除)
  • 1)要素ごとに削除
    - (void)removeObject:(ObjectType)anObject
    [marr1 removeObject:@"x"];
    NSLog(@"marr1 = %@",marr1);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr1 = (
        a,
        b,
        c,
        e
    )

    2)位置別削除
    - (void)removeObjectAtIndex:(NSUInteger)index
    [marr1 removeObjectAtIndex:0];
    NSLog(@"marr1 = %@",marr1);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr1 = (
        b,
        c,
        e
    )

    3)最後の1つを削除
    - (void)removeLastObject
    [marr1 removeLastObject];
    NSLog(@"marr1 = %@",marr1);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr1 = (
        b,
        c
    )

    4)すべて削除
    - (void)removeAllObjects
    [marr1 removeAllObjects];
    NSLog(@"marr1 = %@",marr1);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr1 = (
    )

    5、要素の置換と交換
    NSMutableArray *marr4 = @[@"a",@"b",@"c",@"d",@"c"].mutableCopy;

    1)指定された場所の要素を指定された要素で置き換える
    - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject
    [marr4 replaceObjectAtIndex:marr4.count - 1 withObject:@"e"];
    NSLog(@"marr4 = %@",marr4);

    実行結果
    2016-02-25 15:17:39.429 OC_NSArray NSMutableArray[1822:112530] marr4 = (
        a,
        b,
        c,
        d,
        e
    )

    2)2つの指定された位置の要素を交換する
    - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2
    [marr4 exchangeObjectAtIndex:0 withObjectAtIndex:3];
    NSLog(@"marr4 = %@",marr4);

    実行結果
    2016-02-25 15:17:39.430 OC_NSArray NSMutableArray[1822:112530] marr4 = (
        d,
        b,
        c,
        a,
        e
    )
    Program ended with exit code: 0