通过比较特定元素来过滤nsarray

时间:2017-06-13 15:18:45

标签: objective-c filter nsmutablearray

我在Objective-C,Xcode 8.3,OSX而不是iOS。

我有像这样的NSMutableArrays

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];

我想过滤allArrays,这样如果LAST元素(无论有多少项)等于“第三个字符串”,那么除了FIRST之外,THAT数组的所有元素都会被删除

以上示例的结果应为:

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

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

任何帮助表示感谢。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

较短版本的Maheshs回答:

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
Sum = 6
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
Sum = 12