『Objective-Cプログラミング』17.NSMutableArray

2850 ワード

NSMutableArray
おすすめ読書
  • iOS実録12:NSMutableArray使用中に無視された問題
  • NSMutableArrayは可変配列であり、配列内の記憶領域は動的に変更可能であり、ポインタを追加、削除、または並べ替えることができる.
  • NSMutableArrayはNSArrayに継承されており、NSArrayの方法はいずれも使用可能である.

  • 配列の作成
    Person *p1 = [[Person alloc] init];
    Person *p2 = [[Person alloc] init];
    Person *p3 = [[Person alloc] init];
     
    //1.        
    NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:p1,p2,p3, nil];
    
    //2.     ,      
    NSMutableArray *mArray2 = [[NSMutableArray alloc] init];
    //    
    NSMutableArray *mArray21 = [NSMutableArray array];
    
    //3.     ,       3     , 3       ,       。
    NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithCapacity:3];
    

    addObject:要素の追加
    [mArray1 addObject:p1];
    

    count:取得配列要素個数
    NSLog(@"%ld",[mArray1 count]);
    

    配列mArray 2のすべての要素をmArray 1に追加
    [mArray1 addObjectsFromArray:mArray2];
    

    要素を挿入する位置を指定
    [mArray1 insertObject:@"hello" atIndex:0];
    

    要素の置換
    [mArray1 replaceObjectAtIndex:0 withObject:@"     "];
    

    インデックス0とインデックス3の要素は、ソートに使用できます.
    [mArray1 exchangeObjectAtIndex:0 withObjectAtIndex:3];
    

    例:取得したNSMutableArrayタイプのデータは、UItableViewに逆順序で表示する必要があります.これまでは、インデックスに手足を動かす方法でした:NSUInteger index = self.dateSourceArray.count - indexPath.row - 1;、欠点は、tableView:cellForRowAtIndexPath:tableView:didSelectRowAtIndexPath:の両方で逆インデックス値を取得してからデータを取得することです.YYYYitのソースコードの中の方法を参考にして、直接データソースの上で処理します:[self.dateSourceArray reverse];
    //     ,   YYCategories 
    - (void)reverse {
        NSUInteger count = self.count;
        int mid = floor(count / 2.0);
        for (NSUInteger i = 0; i < mid; i++) {
            [self exchangeObjectAtIndex:i withObjectAtIndex:(count - (i + 1))];
        }
    }
    

    要素の削除
    //1>        
    [mArray1 removeObjectAtIndex:0];
    
    //2>       
    [mArray1 removeObject:@“hello”];
    
    //3>        
    [mArray1 removeLastObject];
    
    //4>      
    [mArray1 removeAllObjects];
    

    ツールバーの
    指定されたソート記述子配列を使用して、受信者をソートします.
    - (void)sortUsingDescriptors:(NSArray *)sortDescriptors;
    

    例:
    ソート前:BMITime[5045:651300]employees:(「」、「」、「」、「」、「」)
    //      valueOfAssets           
     NSSortDescriptor *voa = [NSSortDescriptor sortDescriptorWithKey:@"valueOfAssets" ascending:YES];
    //          valueOfAssets     ,    employeeID         
    NSSortDescriptor *eid = [NSSortDescriptor sortDescriptorWithKey:@"employeeID" ascending:YES];
            
    [employees sortUsingDescriptors:@[voa,eid]];
    

    結果:
    BMITime[5010:648085] employees: ( "", "", "", "", "")