當前位置:首頁 » 凈水方式 » ios數組過濾

ios數組過濾

發布時間: 2021-04-07 19:09:16

① ios開發中NSArray怎麼用NSPredicate來過濾數組內容

//找出一個數組
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *defaultPath = [[NSBundle mainBundle] resourcePath];
NSError *error;

NSArray *directoryContents = [fileManager contentsOfDirectoryAtPath:defaultPath error:&error]
//匹配字元串,反回結果, SELF==表示數組中每一個元素
NSString *match = @"imagexyz-999.png";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", match];
NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];

//近似匹配字元串,類似SQL中的語法
NSString *match = @"imagexyz*.png";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like %@", match];
NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
//不區分大小寫匹配
NSString *match = @"imagexyz*.png";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[cd] %@", match];
NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
//正則匹配
NSString *match = @"imagexyz-//d{3}//.png";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match];
NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];

② ios search controller搜索數組里數組怎麼辦

NSPredicate是什麼

NSPredicate:謂詞
字面翻譯是這個意思,但是我覺得謂詞這個詞太難以理解了
NSPredicate的具體用途應該還是過濾,類似於過濾條件之類的,相當於一個主語的謂語,所以說會是謂詞這個名字。(我是這么理解的)

NSPredicate的創建

我們看到創建謂詞使用類方法predicateWithFormat: (NSString*) format,format 里的東西真的
和SQL 的where 條件差不多。
另外,參數format 與NSLog 的格式化模版差不多,如果1 和
188.0 是傳遞過來的參數,你可以寫成如下的形式:
@"pid>%d and height<%f",1,188.0

NSPredicate中主要的幾種運算方式

1.比較運算符 > 、< 、== 、 >= 、<= 、 !=
例:@"number >= 99"

2.邏輯運算符:AND、OR、NOT 這幾個運算符計算並、或、非的結果。

3.范圍運算符:IN 、BETWEEN
例:@"number BETWEEN {1,5}"
@"address IN {'shanghai','nanjing'}"

4.字元串本身:SELF
例:@"SELF == 'APPLE'"

5.字元串相關:BEGINSWITH、ENDSWITH、CONTAINS
例: @"name CONTAIN[cd] 'ang'" //包含某個字元串
@"name BEGINSWITH[c] 'sh'" //以某個字元串開頭
@"name ENDSWITH[d] 'ang'" //以某個字元串結束
注:[c]不區分大小寫 , [d]不區分發音符號即沒有重音符號 , [cd]既不區分大小寫,也不區分發音符號。

6.通配符:LIKE
例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].
@"name LIKE[cd] '???er*'"

7.正則表達式:MATCHES
例:NSString *regex = @"^A.+e$"; //以A開頭,e結尾
@"name MATCHES %@",regex

如何使用NSPredicate對一個自定義實體進行篩選

NSPredicate我暫時都是用於過濾的,否則我們過濾就需要自己寫判斷 寫循環,去判斷輸出了。
接下來就上代碼和例子吧。

建立一個實體類 Dog

@property ( , nonatomic) NSString* name;
@property (assign , nonatomic) int age ;

這樣我們就有一個類了
我們創建 5隻Dog的實體

Dog * dog1=[Dog news];dog1.name=@"這是第一隻Dog";dog1.age=@"11";
Dog * dog2=[Dog news];dog2.name=@"這是第二隻Dog";dog2.age=@"22";
Dog * dog3=[Dog news];dog3.name=@"這是第三隻Dog";dog3.age=@"33";
Dog * dog4=[Dog news];dog4.name=@"這是第四隻Dog";dog4.age=@"44";
Dog * dog5=[Dog news];dog5.name=@"這是第五隻Dog";dog5.age=@"55";

不要吐槽我的Dogs的年齡 → 。→
然後我們需要一個Array把他們都裝進去

NSArray * dogArr=@[dog1,dog2,dog3,dog4,dog5];

醬紫所有的Dog都裝到一個數組里了

使用NSPredicate的篩選

  1. 沒有使用NSPredicate的篩選應該大家都會寫,循環+判斷。。。
  2. 使用NSPredicate的篩選
具體使用的代碼//創建謂詞的對象 謂詞條件是基於KVC的,所以需要說明一點,加入Dog裡面有個屬性是Doginfo指向Doginfo類,在使用的時候 我們的條件就要寫成Doginfo.xxx了。
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name=='這是第一隻Dog' AND age ==11"];
for(Dog * d in dogArr)
{
if([predicate evaluateWithObject:d])
{
NSLog(d.name);
}
}

以上的代碼列印出來的結果就是 這是第一隻Dog

NSPredicate篩選一個對象邏輯還是很清晰的,不過這里比較麻煩的就是 還有一個循環,這里我們會發現數組提供了一個方法可以更方便的檢索數組對象

直接篩選出一個符合謂詞的新數組。

NSPredicate *pre = [NSPredicate predicateWithFormat:@"age >11"];
NSMutableArray *arrayPre=[dogArr filteredArrayUsingPredicate: pre];

arrayPre裡面的對象就會是 除了dog1之外的所有的dog。(至於為什麼看我的條件...)

看到這里發現NSPredicate 可以用於自定義的實體的檢索、篩選,那如果用於 NSString,NSInteger,bool呢?那我們再看一段代碼吧NSArray *arrays=[NSArray arrayWithObjects: @"Apple", @"Google", @"MircoSoft", nil];
NSPredicate *pre2 = [NSPredicate predicateWithFormat:@"SELF=='Apple'"];

上面這段代碼是匹配字元串的時候 NSPredicate 需要如何聲明

使用NSPredicate在兩個數組之間進行差異篩選NSArray* array = @[@"aa",@"bb"];
NSArray* array2 = @[@"aa",@"bb",@"cc",@"dd"];
NSPredicate* thePredicate = [NSPredicate predicateWithFormat:@"NOT(SELF in %@)",array];
NSArray* arr3 = [array2 filteredArrayUsingPredicate:thePredicate];
NSLog(@"%@",arr3);

上面的代碼輸出結果 arr3={@"cc" ,@"dd"}
這樣大家就很容易理解了
SELF在前面有介紹過 可以往回翻閱一下

如何使用正則篩選一個數組NSString *regex = @"^A.+e$";//以A 開頭,以e 結尾的字元。
NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if([pre evaluateWithObject: @"Apple"]){
printf("YES ");
}else{
printf("NO ");
}關於NSPredicate的其他說明和注意事項,以及技巧
  1. 動態屬性名

假如你的代碼如下

NSPredicate *p = [NSPredicate predicateWithFormat:@"name = %@", @"name1"];

顯然代碼沒有任何問題,但是這個不是最好的寫法我建議如下寫法:

NSPredicate *preTemplate = [NSPredicate predicateWithFormat:@"name==$NAME"];
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:
@"name1", @"NAME",nil];
NSPredicate *pre=[preTemplate : dic];

這樣看上去可能會讓代碼邏輯更清晰。

當過濾條件欄位都是動態的時候

NSString *key = @"name";
NSString *value = @"name1";
NSPredicate *p = [NSPredicate predicateWithFormat:@"%@ = %@", key, value];

然後當你執行到第三行的時候代碼就會報錯!
邏輯上沒錯誤啊!!!為什麼會出錯呢?
NSPredicate要自動添加引號,所以最後得到的格式應該是@"'name' = 'name1'"。明顯不對。要做的就是:

NSPredicate *p = [NSPredicate predicateWithFormat:@"%K = %@", key, value];

③ ios 判斷數組裡面是否有某個元素

package com.by.boss.utils;

import java.util.Arrays;
import java.util.List;

/**
* 工具類:實現一些數組的常用方法
* @author 高偉
* @date Aug 15, 2011 6:01:42 PM
* @description:
*/
public class ArrayUtils {

/**
* 獲取指定元素item在指定數組array中的下標
* getItemIndexOfArray
* @param array
* @param item
* @return
* 高偉
* Aug 15, 2011 6:02:26 PM
*/
public static int getItemIndexOfArray(Object[] array , Object item) {
List<Object> list = Arrays.asList(array);
return list.indexOf(item);
}

/*
* main method
*/
public static void main(String[] args) {
String[] array = new String[]{"AAA","BBB","CCC"};
String item1 = "DDD";
System.out.println(ArrayUtils.getItemIndexOfArray(array, item1));
String item2 = "BBB";
System.out.println(ArrayUtils.getItemIndexOfArray(array, item2));

/**
* 輸出結果:
* -1
* 1
*/
}
}

④ 如何去除IOS數組中重復的數據

第五十回諸葛亮智算華容關雲長義釋曹操第五十一回曹仁大戰東吳兵孔明一氣周公瑾

⑤ ios 數組中取其中的一個匹配的值怎麼效率高

>>> mapper{1: ['a', 'b', 'c'], 2: ['d'], 3: ['e'], 4: ['f', 'g'], 5: ['h'], 6: ['i'], 7: ['a', 'g']}>>> def itertransfer(mapper): for k, values in mapper.items(): for v in values: yield (k, v) >>> for k, v in itertr

⑥ ios中怎樣把數組從內存中刪除

[array removeAllObject] 刪除所有
[array removeObjectAtIndex:index]按下標刪除元素
[array removeObject:<(id)> inRange:<(NSRange)>]按范圍刪除

⑦ 數組的情況,設置的過濾方法怎麼支持多維數組過濾

這個比較容來易。首先源你數組的大小你自己知道,就假設容量A、B為100吧;其次你需要一個指向A的指針;再次假設你需要過濾A中50個元素,你得知道從什麼位置開始過濾吧;的判斷過濾的位置加上過濾的數量超過總量沒有吧。指針不斷++;復制值到B中,知道遇到過濾的開始的位置。指針繼續++,將要過濾的數量的值一一跳過,不復制進入B.

⑧ Javascript如何過濾數組

你這個數據格式就有問題吧。。
應該是這樣的:
var arr = {
"list":
[{name:"tony","age":22},
{name:"JOE","age":22},
{name:"jod","age":23},
{name:"Kim","age":24}]
};
過濾:專
var array = new Array();
for(var i = 0; i < arr.list.length; i++){
if (arr.list[i].age == 22 ) array.push(arr.list[i]);
}
輸出:屬
var str="";
for (var j = 0; j < array.length; j++){
str += "name:" + array[j].name + " age:"+array[j].age+"\n";
}
alert(str);

⑨ ios 判斷數組中是否有相同的數據

package com.by.boss.utils;

import java.util.Arrays;
import java.util.List;

/**
* 工具類:實現一些數組的常用方法
* @author 高偉
* @date Aug 15, 2011 6:01:42 PM
* @description:
*/
public class ArrayUtils {

/**
* 獲取指定元素item在指定數組array中的下標
* getItemIndexOfArray
* @param array
* @param item
* @return
* 高偉
* Aug 15, 2011 6:02:26 PM
*/
public static int getItemIndexOfArray(Object[] array , Object item) {
List<Object> list = Arrays.asList(array);
return list.indexOf(item);
}

/*
* main method
*/
public static void main(String[] args) {
String[] array = new String[]{"AAA","BBB","CCC"};
String item1 = "DDD";
System.out.println(ArrayUtils.getItemIndexOfArray(array, item1));
String item2 = "BBB";
System.out.println(ArrayUtils.getItemIndexOfArray(array, item2));

/**
* 輸出結果:
* -1
* 1
*/
}
}
分享

⑩ iOS去除數組中重復元素的幾種方法

import java.util.*;

class BaiDu
{
public static void main(String[] args)
{
TreeSet<String> tr = new TreeSet<String>();
String[] s ={"11","22","22","33","33","33"};
System.out.print("====處理前=======");
for(int i=0;i<s.length;i++){
System.out.print(s[i]+" ");
tr.add(s[i]);

}
String[] s2= new String[tr.size()];
System.out.println("=====處理後======");
for(int i=0;i<s2.length;i++){
s2[i]=tr.pollFirst();//從TreeSet中取出元素重新賦給數組
System.out.print(s2[i]+" ");
}
}
}

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239