Альтернативный метод в цели для retainAll - PullRequest
1 голос
/ 17 ноября 2011

Функция метода RetainAll находится в Java, что является альтернативным методом в target-C

Пример кода в Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainClass {
  public static void main(String args[]) {
    String orig[] = { "1st", "2nd", "3rd", "4th", "5th", "1st", "2nd", "3rd",
        "4th", "5th" };
    String act[] = { "2nd", "3rd", "6th" };
    List origList = new ArrayList(Arrays.asList(orig));
    List actList = Arrays.asList(act);

    System.out.println(origList.retainAll(actList));
    System.out.println(origList);
  }
}

Выход, который дает 2-й 3-й 2-й 3-й

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

В NSArray нет простого метода, но вы можете добиться того же эффекта с помощью предиката:

NSArray *intersectionOfArrays = [orig filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF IN %@", act]];

Как отмечает Тим ​​Дин, обычно это операции над наборами, а не над массивами, и в NSSet есть методы для этого. Если ваше приложение на самом деле может использовать набор здесь, то это, вероятно, лучший подход, вместо того, чтобы вводить поведение набора в массив. Но если вам нужно сохранить исходный порядок, вам придется делать это с помощью предиката.

1 голос
/ 17 ноября 2011

Вы должны быть в состоянии сделать нечто подобное с наборами в Objective-C:

NSArray *init = [NSArray arrayWithObjects:@"1st", @"2nd", @"3rd", @"4th", @"5th", @"1st", @"2nd", @"3rd", @"4th", @"5th", nil];
NSArray *act = [NSArray arrayWithObjects:@"2nd", @"3rd", @"6th", nil];

NSCountedSet *initSet = [[NSCountedSet alloc] initWithArray:init];
NSCountedSet *actSet = [[NSCountedSet alloc] initWithArray:act];

[initSet intersectSet:actSet];
NSLog(@"Intersection of sets: %@", initSet);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...