block 陣列排序

2021-09-08 10:34:42 字數 2091 閱讀 4794

#import

//定義⼀乙個block,返回值為bool,有兩個nsstring引數。實現:判

//斷字串是否相等。

bool (^comparestring)(nsstring *, nsstring *) = ^(nsstring *str1, nsstring *str2)else

};

if (comparestring(@"sss",@"sss"))

//定義⼀乙個block,返回值為nsinteger,有兩個引數,⼀乙個是 nsarray,⼀乙個是nsstring。實現:判斷陣列時候包含此字串,如 果包含,返回字串的下標,如果不包括,返回-1。

nsarray *arr = @[@"aa",@"ss",@"ww"];

nsstring *str = @"ss";

int (^find)(nsarray *, nsstring *) = ^(nsarray *arr, nsstring *str ) }

return -1;

};

int f = find(arr,str);

nslog(@"%d",f);

//建立⼀乙個陣列,初始化為@「123",@"21",@"33",@"69", @「108」,

//@「256」。使⽤用block語法,進⾏行陣列的排序。並輸出內容。 排序結果:108 123 21 256 33 69

//提⽰示:sortedarraywithoptions:usingcomparator:

//不可變陣列

nsarray *arr1 = @[@"23", @"1", @"3", @"2", @"108"];

nsarray *arr2 = [arr1  sortedarrayusingcomparator:^nscomparisonresult(id obj1, id obj2)

return nsorderedsame; }

];

nslog(@"sortarray1:%@", arr2);

nsarray *arr11 = @[@"23", @"1", @"3", @"2", @"108"];

nsarray *a1 = [arr11  sortedarrayusingcomparator:^nscomparisonresult(id obj1, id obj2)

return nsorderedsame; }

]; nslog(@"sortarray1:%@", a1);

//5, 給可變陣列排序的block

//5,1

nscomparator sortblock = ^(id string1, id string2) ;

nsmutablearray *stringarray = [nsmutablearray arraywithobjects:@"g", @"c", @"b", @"a",nil];

nsarray *a = [stringarray sortedarrayusingcomparator:sortblock];

nslog(@"array:%@", a);

//分開寫的block 不可變陣列

nscomparator sortblock1 = ^(id string1, id string2) ;

nsarray *stringarray2 = [nsarray arraywithobjects:@"g", @"c", @"b", @"a",nil];

nsarray *a2 = [stringarray2 sortedarrayusingcomparator:sortblock1];

nslog(@"分開寫的block 可變陣列:%@", a2);

//4. 使用block根據person的age進行排序,並輸出

[array sortusingcomparator:^nscomparisonresult(person *p1 ,person *p2)];

/*//根據年齡 公升序排列

[array sortusingcomparator:^nscomparisonresult(id p1, id p2)

return nsorderedsame;

}];*/

block的用法和陣列排序

一 block我們 都知道函式只可以巢狀呼叫 但決不允 許函式的巢狀定義,這有時給我 們帶來了很大的不便,而 oc提供的 block用法為 我們解決了這個問題 下面簡單說一下 1,block 的用法 1 block 是用來儲存函式 所以給block 賦值時賦 的是整個函式的實現,例如,要在main ...

Block的使用 初探Block

看了兩天的block。網上是有非常多解說與教程,也有講得非常好的。這裡就主要解說下我的理解與收穫。歡迎拍磚。所謂block。我覺得應該是乙個閉包函式。而閉包,就是說block以及內部全部的變數生命週期都在其呼叫函式的生命週期內。它一被呼叫完畢,則會被立刻釋放。這裡不講執行機制,僅僅簡要地講基本的用法...

Block中 block實現原理

三.block中 block實現原理 我們繼續研究一下 block實現原理。1.普通非物件的變數 先來看看普通變數的情況。import int main int argc,const char ar myblock return 0 把上述 用clang轉換成原始碼。struct block byr...