日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios nsstring根据ascii码大小排序_iOS(NSPredicate) 谓词的使用

發布時間:2024/8/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios nsstring根据ascii码大小排序_iOS(NSPredicate) 谓词的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考
iOS-謂詞的使用詳解
NSPredicate 謂詞

NSPredicate

A definition of logical conditions used to constrain a search either for a fetch or for in-memory filtering.
一種邏輯條件的定義,可以根據定義的模糊查詢條件,對內存對象進行過濾搜索。

1.比較運算符

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {@autoreleasepool {NSNumber *number = @123;NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF = 123"];NSLog(@"%@", [predicate evaluateWithObject:number] ? @"YES" : @"NO");}return 0; }// RESULT : YES

=、==:判斷兩個表達式是否相等<=:判斷右邊表達式的值是否小于或等于右邊表達式的值>=:判斷左邊表達式的值是否大于右邊表達式的值<:判斷左邊表達式的值是否小于右邊表達式的值> :判斷左邊表達式的值是否大于右邊表達式的值!=:判斷兩個表達式是否不相等

BETWEEN {下限,上限}:必須大于或等于下限,并小于或等于上限

NSNumber *number = @123;NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {100, 123} "];NSLog(@"%@", [predicate evaluateWithObject:number] ? @"YES" : @"NO");// RESULT : YES

2.邏輯運算符

NSArray *array = @[@1, @2, @3, @4, @5];NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF > 2 && SELF < 5"];NSArray *filterArray = [array filteredArrayUsingPredicate:predicate];NSLog(@"%@", filterArray);// RESULT : (3,4 )

AND、&&:邏輯與,要求兩個表達式的值都為YES時,結果才為YESOR、||:邏輯或,要求其中一個表達式為YES時,結果就是YESNOT、 !:邏輯非,對原有的表達式取反


3.字符串比較運算符

NSString *string = @"abcd";NSPredicate *predicate = [NSPredicate predicateWithFormat:@" %@ BEGINSWITH 'a'", string];NSLog(@"%@", [predicate evaluateWithObject:string] ? @"YES" : @"NO");// RESULT : YES

ENDSWITH :檢查某個字符串是否以指定的字符串結尾CONTAINS :檢查某個字符串是否包含指定的字符串

LIKE :檢查某個字符串是否匹配指定的字符串模板。其之后可以跟?代表一個字符和*代表任意多個字符兩個通配符。比如"name LIKE '*ac*'",這表示name的值中包含ac則返回YES;"name LIKE '?ac*'",表示name的第2、3個字符為ac時返回YES。

MATCHES:檢查某個字符串是否匹配指定的正則表達式。雖然正則表達式的執行效率并不高,但其功能是最強大的,也是我們最常用的。

注: 字符串比較都是區分大小寫和重音符號的。如:café和cafe是不一樣的,Cafe和cafe也是不一樣的。如果希望字符串比較運算不區分大小寫和重音符號,請在這些運算符后使用[c],[d]選項。其中[c]是不區分大小寫,[d]是不區分重音符號,其寫在字符串比較運算符之后,比如:"name LIKE[cd] 'cafe'",那么不論name是cafe、Cafe還是café上面的表達式都會返回YES。

4.集合運算符

ANY、SOME :集合中任意一個元素滿足條件,就返回YES。

ALL :集合中所有元素都滿足條件,才返回YES。

NONE :集合中沒有任何元素滿足條件就返回YES。如:NONE person.age<18,表示person集合中所有元素的age>=18時,才返回YES。

IN:等價于SQL語句中的IN運算符,只有當左邊表達式或值出現在右邊的集合中才會返回YES。

NSArray *array1 = @[@"a", @"ab", @"abc" ,@"abcd"];NSArray *array2 = @[@"ab", @"abc" ];NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", array1];NSLog(@"%@", [array2 filteredArrayUsingPredicate:predicate]);// RESULT : (ab,abc )

5.直接量

在謂詞表達式中可以使用如下直接量 :

FALSE、NO:代表邏輯假TRUE、YES:代表邏輯真NULL、NIL:代表空值

SELF :代表正在被判斷的對象自身

"string"或'string':代表字符串數組:和c中的寫法相同,如:{'one', 'two', 'three'}。數值:包括整數、小數和科學計數法表示的形式十六進制數:0x開頭的數字八進制:0o開頭的數字二進制:0b開頭的數字


實例

簡單的使用

// 1.判斷姓名是否是以s開頭的,上面已經用過BEGINSWITH方法,這里用LIKE NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"name LIKE 's*'"]; NSLog(@"sunnyzl:%d, jack:%d", [pred1 evaluateWithObject:sunnyzl], [pred1 evaluateWithObject:jack]); // 輸出為:sunnyzl:1, jack:0// 2.判斷年齡是否大于25 NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"age > 25"]; NSLog(@"sunnyzl的年齡是否大于25:%d, jack的年齡是否大于25:%d", [pred2 evaluateWithObject:sunnyzl], [pred2 evaluateWithObject:jack]); // 輸出為:sunnyzl的年齡是否大于25:1, jack的年齡是否大于25:0

搭配正則表達式使用

NSString *regex = @"^[1][3-8]d{9}$";NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];NSLog(@"%d", [predicate evaluateWithObject:@"13888888888"]);// RESULT : 1

使用謂詞過濾集合

此部分是我們需要掌握的重點,因為從這里我們就可以看到謂詞的真正的強大之處

其實謂詞本身就代表了一個邏輯條件,計算謂詞之后返回的結果永遠為BOOL類型的值。而謂詞最常用的功能就是對集合進行過濾。當程序使用謂詞對集合元素進行過濾時,程序會自動遍歷其元素,并根據集合元素來計算謂詞的值,當這個集合中的元素計算謂詞并返回YES時,這個元素才會被保留下來。請注意程序會自動遍歷其元素,它會將自動遍歷過之后返回為YES的值重新組合成一個集合返回。

  • NSArray提供了如下方法使用謂詞來過濾集合-- (NSArray<ObjectType> *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
    使用指定的謂詞過濾NSArray集合,返回符合條件的元素組成的新集合
NSArray *array = @[@"aaajson", @"bbbjson", @"cccson", @"ddddd"];NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS 'json'"];NSArray *newArray = [array filteredArrayUsingPredicate:predicate];NSLog(@"%@",newArray);// RESULT:(aaajson,bbbjson )
  • NSMutableArray提供了如下方法使用謂詞來過濾集合- (void)filterUsingPredicate:(NSPredicate *)predicate;
    使用指定的謂詞過濾NSMutableArray,剔除集合中不符合條件的元素
NSMutableArray *arrayM = [@[@10, @20, @30, @40, @50, @60, @70] mutableCopy];NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF > 50"];[arrayM filterUsingPredicate:predicate];NSLog(@"%@", arrayM);// RESULT:(60,70 )
  • NSSet提供了如下方法使用謂詞來過濾集合- (NSSet<ObjectType> *)filteredSetUsingPredicate:(NSPredicate *)predicate作用同NSArray中的方法
  • NSMutableSet提供了如下方法使用謂詞來過濾集合- (void)filterUsingPredicate:(NSPredicate *)predicate作用同NSMutableArray中的方法。
通過上面的描述可以看出,使用謂詞過濾不可變集合和可變集合的區別是:過濾不可變集合時,會返回符合條件的集合元素組成的新集合;過濾可變集合時,沒有返回值,會直接剔除不符合條件的集合元素

在謂詞中使用占位符參數

首先如果我們想在謂詞表達式中使用變量,那么我們需要了解下列兩種占位符:

%K:用于動態傳入屬性名

%@:用于動態設置屬性值

其實相當于變量名與變量值,除此之外,還可以在謂詞表達式中使用動態改變的屬性值,就像環境變量一樣

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF CONTAINS $VALUE"];

上述表達式中,$VALUE是一個可以動態變化的值,它其實最后是在字典中的一個key,所以可以根據你的需要寫不同的值,但是必須有開頭

VALUE`這個謂詞表達式的比較條件就可以動態改變。

下面我們通過一個例子來看看這三個重要的占位符應該如何使用

NSArray *array = @[[PersonModel personWithName:@"Jack" age:20], [PersonModel personWithName:@"Rose" age:22], [PersonModel personWithName:@"Jackson" age:30], [PersonModel personWithName:@"Johnson" age:35]; // 定義一個property來存放屬性名,定義一個value來存放值 NSString *property = @"name"; NSString *value = @"Jack"; // 該謂詞的作用是如果元素中property屬性含有值value時就取出放入新的數組內,這里是name包含Jack NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K CONTAINS %@", property, value]; NSArray *newArray = [array filteredArrayUsingPredicate:pred]; NSLog(@"newArray:%@", newArray);// RESULT:newArray:( "[name = Jack, age = 20, sex = 0]", "[name = Jackson, age = 30, sex = 0]" ) // 創建謂詞,屬性名改為age,要求這個age包含$VALUE字符串 NSPredicate *predTemp = [NSPredicate predicateWithFormat:@"%K > $VALUE", @"age"]; // 指定$VALUE的值為 25 NSPredicate *pred1 = [predTemp predicateWithSubstitutionVariables:@{@"VALUE" : @25}]; NSArray *newArray1 = [array filteredArrayUsingPredicate:pred1]; NSLog(@"newArray1:%@", newArray1);// RESULT:newArray1:( "[name = Jackson, age = 30, sex = 0]", "[name = Johnson, age = 35, sex = 0]" ) // 修改 $VALUE的值為32 NSPredicate *pred2 = [predTemp predicateWithSubstitutionVariables:@{@"VALUE" : @32}]; NSArray *newArray2 = [array filteredArrayUsingPredicate:pred2]; NSLog(@"newArray2:%@", newArray2);// RESULT: newArray2:( "[name = Johnson, age = 35, sex = 0]" )

謝謝你長的這么好看,還關注我!!!點個贊唄!!

如果有什么不對的請各位大佬留言提示,然后有什么別的需要改進的提示請聯系我我會及時補充~

over.over.

部分文章來自轉載他人,如有侵權請聯系作者刪除

總結

以上是生活随笔為你收集整理的ios nsstring根据ascii码大小排序_iOS(NSPredicate) 谓词的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美黄色免费 | 深夜福利av | 久久艹国产 | 性生交大片免费看女人按摩 | 天天久久综合网 | 国产精品视频久久久 | 一本色道久久88亚洲精品综合 | 女生扒开尿口让男生桶 | 岛国二区 | 欧美大白屁股 | www.欧美国产 | 99热播精品 | 亚洲va久久久噜噜噜久久天堂 | 日本美女性爱视频 | missav|免费高清av在线看 | 天堂欧美城网站 | 九九热在线播放 | 娇妻被肉到高潮流白浆 | 亚洲在线一区二区三区 | 天天爱夜夜爽 | 又黄又刺激的视频 | 免费成人美女女电影 | 91免费国产| 日本中文字幕不卡 | 精品国产乱码久久久久久久 | 亚洲最大毛片 | 亚洲精品国产一区二区 | 日日夜夜狠狠 | 免费a大片 | 91精品国产高清一区二区三蜜臀 | 国产乱子伦精品无码专区 | 国产又黄又粗又猛又爽 | xxxxxx日本 | 色94色欧美 | 我爱av好色 | 国产1区2区3区4区 | 欧美另类videosbestsex | avav国产| www.youjizz.com在线观看 | 亚洲小说春色综合另类 | 快色污 | 精品裸体舞一区二区三区 | 香蕉精品在线 | 日本人性爱视频 | av在线资源播放 | 中文成人无字幕乱码精品区 | 亚洲干| 泰剧19禁啪啪无遮挡 | 芭乐视频色 | 尤物综合网| 色av吧| 亚洲性网站| 国产精品一区二区三区四 | 国产成人精品久久二区二区 | 成人看| 17c在线 | 人人妻人人澡人人爽精品欧美一区 | 亚洲激情视频在线观看 | 特黄网站 | 午夜色婷婷 | 美女屁股眼视频免费 | 噜噜色综合 | 久操青青 | 久久中文字幕一区 | 欧美影视一区 | 亚洲精品白浆高清久久久久久 | 午夜成人在线视频 | 久久露脸国语精品国产 | 免费a级大片 | 国产99久久| av在线免 | 欧美三级午夜理伦三级老人 | 东北女人啪啪ⅹxx对白 | 99re热视频 | av亚洲在线| 性生生活大片又黄又 | 亚洲色图欧美色 | 亚洲精品国产精品乱码不卡√香蕉 | 国产999久久久 | 亚洲人成高清 | 在线观看黄色网页 | 亚洲免费看黄 | 天堂аⅴ在线最新版在线 | 国产一区二区三区日韩 | 污污视频网站在线免费观看 | 无码人妻精品一区二区三应用大全 | 欧美国产片 | 新天堂网 | 香蕉黄色网 | av一区二区三区免费观看 | 91精品一区二区三 | 成人理论视频 | 日韩综合中文字幕 | 91精品久久久久久久久中文字幕 | 亚洲久久综合 | 日韩欧美国产三级 | 中文字幕第315页 | av在线免播放器 | 天堂av免费在线观看 |