在工作工程中我們不必要會遇到,在陣列中有重複資料的時候,如何去除重複的資料呢?
第一種:利用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 ...