2017-06-13 60 views
0

我在Objective-C,Xcode 8.3,OSX而不是iOS上。通过比较特定元素来筛选nsarray

我有这样

NSMutableArray* A = [NSMutableArray arrayWithObjects:@"one string", @"another string", @"third string", nil]; 
NSMutableArray* B = [NSMutableArray arrayWithObjects:@"one string", @"second string", nil]; 
NSMutableArray* C = [NSMutableArray arrayWithObjects:@"one string", @"second string", @"third string", nil]; 

的NSMutableArrays所有的数组嵌套另一个数组里面

NSMutableArray allArrays = [NSMutableArray arrayWithObjects: A,B,C,nil]; 

我想通过allArrays过滤,这样,如果最后一个元素(不管多少条目in)等于“第三个字符串”,那么THAT阵列的所有元素都将被移除,除了第一个以外

@[ 
@[@"one string"], // A 
@[@"one string", @"second string"], // B 
@[@"one string"] // C 
] 

我已经得到了迭代和比较的工作解决方案,但必须有更有效的东西!

任何帮助表示赞赏。

+1

如果你有解决方案,然后将其粘贴。 – Mahesh

回答

0

较短的版本Maheshs答案:

// enumerate the outer array 
[allArrays enumerateObjectsUsingBlock:^(NSMutableArray *innerArray, NSUInteger idx, BOOL *stop){ 
    // test last object 
    if ([innerArray.lastObject isEqualToString:@"third string"]) { 
     // remove objects after the first object 
     [innerArray removeObjectsInRange:NSMakeRange(1, innerArray.count - 1)]; 
    } 
}]; 
0
NSMutableArray* A = [NSMutableArray arrayWithObjects:@"one string", @"another string", @"third string", nil]; 
NSMutableArray* B = [NSMutableArray arrayWithObjects:@"one string", @"second string", nil]; 
NSMutableArray* C = [NSMutableArray arrayWithObjects:@"one string", @"second string", @"third string", nil]; 


NSMutableArray *allArrays = [NSMutableArray arrayWithObjects: A,B,C,nil]; 


for (NSMutableArray *innerArray in allArrays) 
{ 
    //check that inner is not empty 
    if (innerArray.count > 0) 
    { 
     //Compare the last object 
     if ([[innerArray lastObject] isEqualToString:@"third string"]) 
     { 
      //copy first string 
      NSString *firstString = [innerArray firstObject]; 

      //remove all items from array 
      [innerArray removeAllObjects]; 

      //Now insert copied string into empty array 
      [innerArray addObject:firstString]; 
     } 

    } 

} 

NSLog(@"%@",allArrays);