RetainAll方法函数在java中是Objective-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);
}
}
第二名第3名第2名第3名的输出
答案 0 :(得分:2)
在NSArray中没有一个简单的方法,但你可以用谓词实现相同的效果:
NSArray *intersectionOfArrays = [orig filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF IN %@", act]];
正如Tim Dean所指出的,这通常是对集合而不是数组的操作,而NSSet确实有这样做的方法。如果你的应用程序实际上可以在这里使用一个集合,那么这可能是最好的方法,而不是将设置行为设置为数组。但是如果你需要保持原始顺序,你必须使用谓词。
答案 1 :(得分:1)
您应该可以使用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);