2012-06-19 2 views
1

두 개의 배열이 있습니다.순서를 유지하면서 다른 NSArray의 값에서 NSDictionaries의 NSArray를 필터링

첫 번째 배열은 매우 구체적인 순서로 국가 이름 목록입니다.

countryNames = ["Canada", "USA", "Mexico"]; 

두 번째 배열은 국가 개체의 모음입니다. countryNames 순서를 유지하면서

countries = [ {name: "USA", foo: "bar"}, {name: "Italy", foo: "bar"}, {name: "Canada", foo: "bar"}, {name: "Mexico", foo: "bar"} ] 

는 I은 countryNames 배열을 사용 countries를 필터링해야한다.

내 첫 번째 시도는 제대로 필터링하지만, 순서를 유지하지 않습니다

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name in %@", countryNames]; 
NSArray *filteredCountries = [countries filteredArrayUsingPredicate:predicate]; 

나는 국가의 순서가 유지되는 것입니다 무슨 일이 일어나고 있는지 생각을 뺀 사람은 countryNames에서 찾을 수 없습니다.

아이디어가 있으십니까?

답변

0

내가 이것을 피하려고했지만, 지금까지 내가 알고있는 유일한 방법입니다 :

NSMutableArray *filteredCountries = [[[NSMutableArray alloc] init] autorelease]; 
NSArray *countryNames = ... // list of country names. this order matters 
NSArray *countries = ... // array of country objects 
for (NSString *name in countryNames) { 
    for (NSDictionary *dict in countries) { 
     if ([[dict objectForKey:@"name"] isEqualToString:name]) { 
      [filteredCountries addObject:dict]; 
     } 
    } 
} 

그것은 짜증 만 제공됩니다. 더 나은, 더 우아한 해결책을 여전히 환영합니다.

+0

http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html – vikingosegundo

0

국가는 항목이있는 순서대로 머물러야합니다. 가장 간단한 방법은 국가를 적절한 순서로 재정렬 한 다음 필터링하거나 키워드를 필터링 한 후 정렬하는 것입니다. 또한 국가에 주문 필드를 추가하고 sortedArrayUsingSelector을 사용할 수

여기 문서를 참조하십시오 : http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html#//apple_ref/doc/uid/20000132-SW5

+0

이러한 개체는 모두 웹 서비스 요청에서 되돌아오고 있으며 클라이언트는 '국가'정렬 방법을 알 수 없습니다. 서버는'created_at'에 의해'countryNames'를 정렬하기 때문에 순서를 결정해야합니다. – djibouti33

+0

좋아, 어쩌면 내가이 문제를 정확하게 이해하지 못하는 것일 수도있다. 국가는 올바른 순서로 있지만 countryNames는 아닌가? 그들은 "미국", "이탈리아", "캐나다"또는 "캐나다", "미국", "멕시코"순으로 있어야합니까? 다른 말로하면, 당신은 Predicate로부터 돌아가고 싶은 결과가 무엇입니까? –

+0

나는'countryNames'의 순서 만 신경 쓰고 있습니다. 술어의 결과는 [{Canada}, {USA}, {Mexico}}이어야합니다. – djibouti33

0

사전이 정렬되지 않은 모음입니다. 거기에 질서가 없습니다. 순서를 유지하는 배열에 키를 유지 한 다음 배열 객체를 사용하여 정렬해야합니다. 참조 용으로 this link을보십시오.

감사합니다.

+0

그게 내가하는 일이야. 'countryNames'는 특정 순서로 키 배열입니다. 이러한 키를 사용하여'countryNames'의 키와 이름이 일치하는'countries'에서 특정 사전을 가져와야합니다. – djibouti33

관련 문제