2

カンマで区切らNSStringれた 's が 2 つあり、同様の文字を最初の文字列からのみ削除したい。

ex. str1 = 0,1,2,3
    str2 = 1,2.
    output -> str1 = 0,3 and str2 = 1,2.

配列内のコンマ区切り値で両方の文字列を区切るという 1 つのオプションがあります。しかし、2 つNSArrayの & を適用loopして共通要素を削除する必要がありますが、これは非常に面倒な作業です。したがって、ループを回避するシンプルで適切なソリューションが必要です。

これを整理するのを手伝ってください。

4

4 に答える 4

6

これを試してください:

ループは必要ありません!!!

必要なAPIがすべて揃っています。

NSString *str1=@"0,1,2,3";
NSString *str2=@"1,2";

NSMutableArray *arr1=[[NSMutableArray alloc]initWithArray:[str1 componentsSeparatedByString:@","]];

[arr1 removeObjectsInArray:[str2 componentsSeparatedByString:@","]];
NSLog(@"arr1 %@",arr1);
/*
NSMutableString *finalString=[NSMutableString new];

for (NSInteger i=0; i<[arr1 count]; i++) {
    NSString *str=[arr1 objectAtIndex:i];

    [finalString appendString:str];
    if (i!=[arr1 count]-1) {
      [finalString appendString:@","];  
    }
}
*/
NSString *finalString=[arr1 componentsJoinedByString:@","];
NSLog(@"finalString %@",finalString);
于 2012-12-19T14:16:39.817 に答える
0

私が考えることができる唯一の解決策はこれです:

NSMutableArray* arr1 = [str1 componentsSeparatedByString:@","] mutableCopy];
NSArray* arr2 = [str2 componentsSeparatedByString:@","];
for (NSString* str in arr2) {
  [arr1 removeObject:str];
}
NSString* newString1 = [arr1 componentsJoinedByString:@","];

これはあなたが試したことですか?「str1」が「1,1,2,2,2」のように見える場合は、重複を取り除くために、ここでさらに作業を行う必要があるかもしれません。しかし、基本的にはそれだけです。

于 2012-12-19T14:15:50.387 に答える
0
    id str1=@"aa,ab,ac,cd,ce,cf";
    id str2=@"aa,ac,cd,cf";
    //no ab and no ce

    id cmps1 = [str1 componentsSeparatedByString:@","];
    id cmps2 = [str2 componentsSeparatedByString:@","];        

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", cmps2];
    NSArray *final = [cmps1 filteredArrayUsingPredicate:predicate]; 
    id str = [final componentsJoinedByString:@","];
    NSLog(@"%@", str);
于 2012-12-19T14:15:07.007 に答える
0

そんな感じ ?

 NSString *string = @"0,1,2,3";
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self like '1' OR self like '2'"];
 NSLog(@"%@",[[string componentsSeparatedByString:@","] filteredArrayUsingPredicate:predicate]);
于 2012-12-19T14:12:54.737 に答える