關於iOS去除陣列中重複資料的幾種方法

2021-08-22 12:16:12 字數 3474 閱讀 6259

在工作工程中我們不必要會遇到,在陣列中有重複資料的時候,如何去除重複的資料呢?

第一種:利用nsdictionary的allkeys(allvalues)方法

**:nsarray *dataarray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-03",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-04",@"2014-04-06",@"2014-04-08",

@"2014-04-05",@"2014-04-07",@"2014-04-09",];

nsmutabledictionary *dic = [[nsmutabledictionary alloc]initwithcapacity:0];

for(nsstring *str in dataarray)

[dic setvalue:str forkey:str];

nslog(@"%@",[dic allkeys]);

列印結果:

"2014-04-09",

"2014-04-02",

"2014-04-08",

"2014-04-01",

"2014-04-07",

"2014-04-06",

"2014-04-05",

"2014-04-04",

"2014-04-03"

第二種方法:利用nsset的allobjects方法

例項**:

nsarray *dataarray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-03",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-04",@"2014-04-06",@"2014-04-08",

@"2014-04-05",@"2014-04-07",@"2014-04-09",];

nsset *set = [nsset setwitharray:dataarray];

nslog(@"%@",[set allobjects]);

列印結果:

"2014-04-01",

"2014-04-02",

"2014-04-03",

"2014-04-04",

"2014-04-06",

"2014-04-08",

"2014-04-05",

"2014-04-07",

"2014-04-09"

第三種方法,利用陣列的containsobject來去除

**如下:

nsarray *dataarray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-03",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-04",@"2014-04-06",@"2014-04-08",

@"2014-04-05",@"2014-04-07",@"2014-04-09",];

nsmutablearray *listary = [[nsmutablearray alloc]init];

for (nsstring *str in dataarray) {

if (![listary containsobject:str]) {

[listary addobject:str];

nslog(@"%@",listary);

列印結果:

"2014-04-01",

"2014-04-02",

"2014-04-03",

"2014-04-04",

"2014-04-06",

"2014-04-08",

"2014-04-05",

"2014-04-07",

"2014-04-09"

第四種方法:利用keyvalue的方式(自己不是太明白)

nsarray *dataarray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-03",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-01",@"2014-04-02",@"2014-04-03",

@"2014-04-04",@"2014-04-06",@"2014-04-08",

@"2014-04-05",@"2014-04-07",@"2014-04-09",];

dataarray = [dataarray valueforkeypath:@"@distinctunionofobjects.self"];

nslog(@"%@",dataarray);

列印結果如下:

"2014-04-01",

"2014-04-02",

"2014-04-03",

"2014-04-04",

"2014-04-06",

"2014-04-08",

"2014-04-05",

"2014-04-07",

"2014-04-09"

案例的使用:

伺服器返回乙個帶有日期的陣列,當然有重複的日期,同乙個的日期的列表要在同乙個地方的話,頭部顯示日期的話,可以使用到此方法去除重複的,當然,根據具體的情況**和邏輯是不同的!

resource reference

去除陣列重複資料

原始陣列 1,2,1,2,3,4,5 結果陣列 1,2,3,4,5 函式 function removesame arr for var i 0 i 4.過程 1 第一輪 i 0 i 7 i j 1 j 7 i 0,j 1,1 2不等,j 1.i 0 j 2,1 1相等 去除第乙個 1,陣列長度變為...

去除陣列中的重複資料

去除陣列中的重複資料 乙個或多個陣列 protected string removeduplicate string arrinput return string nstr.toarray typeof string 去除陣列中的重複項 傳送資訊,新增手機重複問題 新增的號碼內部重複 新增的號碼和原...

js陣列去除重複資料

建立乙個新陣列,然後迴圈遍歷要去重的陣列,每次判斷新陣列不包含舊陣列的值時 新陣列用indexof方法檢索舊陣列的值返回結果等於 1 將該值加入新陣列。let oldarr 1 2,3 4,5 5,6 7,8 2,3 let newarr unique oldarr function unique ...