iOS NSArray

NSArray:

  1. indexOfObjectIdenticalTo:針對的對象地址,當對象是字符串或者數值時,不能根據地址找出兩個重復中的其中一個;當對象是OC對象時,可以。(估計是因為字符串和數值存放在棧:相同的兩個內存中的存儲地址一樣,所以不能利用地址區分。OC對象在堆)。字符串的mutableCopy也在堆區,所以mutable后是兩個儲存地址,也可區分;淺拷貝的copy就不行了。eg.
    NSObject *str1 = @"3";
    NSObject *str2 = [@"3" mutableCopy];
    NSObject *str3 = @"5";
    NSObject *sss = [[UIButton alloc] init];
    NSInteger one = 1;
    NSInteger two = 1;
    NSInteger three = 3;
    NSMutableArray *mA = [NSMutableArray arrayWithObjects:str1,str2,str3, nil];
    NSInteger ii = [mA indexOfObjectIdenticalTo:str2];

  2. componentsJoinedByString: 數組變字符串,并在元素中插入string
    NSArray *arr = @[@"12",@"34",@"5",@"6"];
    NSString *str = [arr componentsJoinedByString:@"wgj"];
    NSLog(@"%@",str);//結果:@"12wgj34wgj5wgj6"。

  3. descriptionWithLocale:等方法,打印,可以自定義,但不要打印self,會循環。后面的參數是用來優化打印的信息,可以在打印的時候,利用參數控制打印的一些自定義格式。

  4. firstObjectCommonWithArray:
    NSArray *arr2 = @[@"34",@"mi",@"12"];
    NSArray *arr = @[@"12",@"34",@"5",@"6"];
    //對比相同的元素,前后對比的對象順序寫法有關
    NSString *str2 = [arr2 firstObjectCommonWithArray:arr];//結果@"34"
    NSString *str = [arr firstObjectCommonWithArray:arr2];//結果@"12

  5. sortedArrayUsingFunction:把數組轉成data,利用函數的規則排序
    NSArray *arr = @[@"322",@"1",@"22"];
    NSData *data = [arr sortedArrayHint];
    NSArray *reArr = [arr sortedArrayUsingFunction:sortType context:@"wg" hint:data];
    NSLog(@"%@",reArr);
    sortType: 自定義規則的函數
    NSInteger sortType(id st,id str,void *cha)
    {
    NSString *s1 = (NSString *)st;
    NSString *s2 = (NSString *)str;

    if(s1.length > s2.length)
    {
    return NSOrderedAscending;
    }else if(s1.length < s2.length)
    {
    return NSOrderedDescending;
    }

    return NSOrderedSame;
    }

  6. sortedArrayUsingSelector: 自定義一個類對象,類里面聲明和實現selector的方法,方法中自定義比較的規則;數組中盛放自定義的類對象,然后會生成比較后的數組結果。eg.
    Man *man1 = [Man sortAllocWithN:@"a" num:19];
    Man *man2 = [Man sortAllocWithN:@"c" num:14];
    Man *man3 = [Man sortAllocWithN:@"b" num:13];

     NSArray *arr = @[man1,man2,man3];
    
      NSArray *array2 = [arr sortedArrayUsingSelector:@selector(myCompare2:)];
     for (Man *sort in array2) {
         NSLog(@"%@", sort.name);
     }
    

其中,Man:.h:
@interface Man : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger number;

  • (NSComparisonResult)myCompare:(NSString *)name;
  • (NSComparisonResult)myCompare2:(Man *)sort;
  • (Man *)sortAllocWithN:(NSString *)name num:(NSInteger)num;
    @end

.m:

  • (Man *)sortAllocWithN:(NSString *)name num:(NSInteger)num {
    Man * sort1 = [[Man alloc] init];
    sort1.name = name;
    sort1.number = num;
    return sort1;
    }
  • (NSComparisonResult)myCompare:(Man *)sort {

    return [self.name compare:sort.name];
    }

// 該方法用來排序數字

  • (NSComparisonResult)myCompare2:(Man *)sort {

    if ( self.number > sort.number ) {
    return NSOrderedDescending;
    } else if (self.number < sort.number ) {
    return NSOrderedAscending;
    } else {
    return NSOrderedSame;
    }
    }

  1. subarrayWithRange: 根據range生成新的子數組。

    • (BOOL)writeToFile: 和 - (BOOL)writeToURL: 寫入存儲,寫入文件
      NSString *cachesDirectoryPath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"test.txt"];
      NSURL *url2 = [NSURL fileURLWithPath:cachesDirectoryPath];
      NSString *reStr = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
      NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[reStr dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];//data:也可以:NSData *data = [NSData dataWithContentsOfFile:path];
  2. makeObjectsPerformSelector和makeObjectsPerformSelector:(SEL)aSelector withObject:。這兩個方法讓數組的每個對象執行事件,不同在于對象中的方法實現:一個可以不帶參數,一個可以帶參數。e.g.
    Man *man1 = [Man sortAllocWithN:@"wg01" num:1];
    Man *man2 = [Man sortAllocWithN:@"wg02" num:2];
    NSArray *arr = @[man1 ,man2];
    [arr makeObjectsPerformSelector:@selector(test01)];

  3. objectsAtIndexes: 根據indexs的集合獲取新的數組。objectAtIndexedSubscript:根據下標獲取單個元素。

10.enumerateObjectsUsingBlock:等,是通過枚舉的方式,遍歷數組。

  1. indexOfObjectPassingTest: 進行判斷,篩選操作,得出想要的元素;
    indexesOfObjectsPassingTest:得出想要的元素數組e.g..
    NSArray *array = @[@"12",@"mi",@"34",@"m",@"34"];
    NSIndexSet *ld = [array indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isEqualToString:@"34"]) {
    NSLog(@"%@",obj);
    return YES;
    }else{
    NSLog(@"NO:%@",obj);
    return NO;
    }

    }];
    
  2. sortedArrayUsingComparator: block里面進行排序,得到新數組eg.
    NSArray *array = @[@"12",@"66",@"34",@"1",@"34"];
    NSArray *resA = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
    if ([obj1 compare:obj2] == NSOrderedAscending) {
    return NSOrderedAscending;
    }else if ([obj1 compare:obj2] == NSOrderedDescending){
    return NSOrderedDescending;
    }else{
    return NSOrderedSame;
    }

     }];
    NSLog(@"%@",resA);
    
    • (NSUInteger)indexOfObject:(ObjectType)obj inSortedRange:(NSRange)r options:(NSBinarySearchingOptions)opts usingComparator:(NSComparator NS_NOESCAPE)cmp,是排序后的查找某元素,利用的折疊法查找,需要先排序
  • (id)array;創建一個空數組
  • (id)arrayWithObject:(id)anObject;指定一個元素創建數組對象
  • (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt;指定個數從一個數組對象創建新的數組對象(類消息)
  • (id)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;指定多個元素創建數組對象
  • (id)arrayWithArray:(NSArray *)array;生成新另外一個數組
  • (id)initWithObjects:(const id [])objects count:(NSUInteger)cnt;指定個數從一個數組對象創建新的數組對象(實例消息)
  • (id)initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION; 指定多個元素創建數組對象
  • (id)initWithArray:(NSArray *)array;從已有數組初始化
  • (id)initWithArray:(NSArray *)array copyItems:(BOOL)flag;從已有數組初始化(標示作用,淺復制,還是深復制)
  • (id)arrayWithContentsOfFile:(NSString *)path;從文件加載數據
  • (id)arrayWithContentsOfURL:(NSURL *)url;從網絡地址加載數據
  • (id)initWithContentsOfFile:(NSString *)path;從文件加載數據
  • (id)initWithContentsOfURL:(NSURL *)url;從網絡地址加載數據

其他:利用kvc對數組進行一些操作:

獲取數組里的,最大、最小、平均、求和

NSArray *array = @[@"1",@"3",@2,@9.5,@"1.2"];
NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"];
NSNumber *avg = [array valueForKeyPath:@"@avg.floatValue"];
NSNumber *max = [array valueForKeyPath:@"@max.floatValue"];
NSNumber *min = [array valueForKeyPath:@"@min.floatValue"];
NSLog(@"sum:%@",sum);
NSLog(@"avg:%@",avg);
NSLog(@"max:%@",max);
NSLog(@"min:%@",min);

刪除重復數據

NSArray *array = @[@"name", @"w", @"aa", @"zxp", @"aa"]; //返回的是一個新的數組
NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
NSLog(@"%@", newArray);

同樣可以嵌套使用,先剔除name對應值的重復數據再取值

NSArray array = @[ @{@"title":@"zxp",@"name":@"zhangxiaoping"}, @{@"title":@"zxp2",@"name":@"zhangxiaoping2"}, @{@"title":@"zxp",@"name":@"zhangxiaoping3"}, @{@"title":@"zxp",@"name":@"zhangxiaoping"}];
//根據name字段,來進行重復刪除。
NSArray newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.name"];
//如果要根據title字段來刪除重名的寫法為@distinctUnionOfObjects.title
NSLog(@"%@", newArray);
//可以從對象組成的數組中,獲取數組中每個對象中字段price的和:用
@UnionOfObjects.price//相同的價格也相加
/

print:( zhangxiaoping3, zhangxiaoping2, zhangxiaoping)是一個字符串數組
/
@distinctUnionOfObjects //清除重復值
@unionOfObjects //保留重復值

進行實例方法的調用

NSArray *array = @[@"name", @"w", @"aa", @"ZXPing"];
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);

相當于數組中的每個成員執行了uppercaseString方法,然后把返回的對象組成一個新數組返回。既然可以用uppercaseString方法,那么NSString的其他方法也可以,比如[array valueForKeyPath:@"length"]。當然,其他對象的實例方法也可以以此類推來進行調用~!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容

  • 記錄-- 下面的例子以 NSArray *array = [NSArray arrayWithObjects:@"...
    北極圈生物閱讀 5,743評論 0 1
  • #pragma mark 創建數組 //1.通過對象方法創建數組// //后面接的是object并且加nil NS...
    _菩提本無樹_閱讀 2,765評論 0 0
  • 今日在項目開發中遇到一個問題:在職位列表A中點擊職位進入職位詳細頁面B,點擊申請職位會到申請職位頁面C,申請...
    Code_Ninja閱讀 2,699評論 0 2
  • KVC(Key-value coding)鍵值編碼,單看這個名字可能不太好理解。其實翻譯一下就很簡單了,就是指iO...
    朽木自雕也閱讀 1,574評論 6 1
  • 整理出的一些簡單實用的OC筆試題,如有錯誤之處希望大家及時提出,以便修改,不誤人子弟.1、不會立刻使引用計數器改變...
    李xiao屁的憂傷閱讀 2,928評論 1 20