IT TIP

iPhone-NSArray 객체에서 고유 값 가져 오기

itqueen 2020. 12. 31. 23:13
반응형

iPhone-NSArray 객체에서 고유 값 가져 오기


I는 한 NSArray사용자 정의 클래스의 개체를 형성했다. 이 클래스에는 3 (city, state, zip) 문자열 속성이 있습니다. 에서 모든 고유 한 상태 값을 얻고 싶습니다 array.

나는 NSPredicate수업을 읽었 지만이 경우 사용 방법을 많이 만들지 못했습니다. 내가 찾을 수있는 유일한 예는 문자열 연산이었습니다.

누군가 나를 도울 수 있습니까?


완전히 간단한 하나의 라이너 :

NSSet *uniqueStates = [NSSet setWithArray:[myArrayOfCustomObjects valueForKey:@"state"]];

트릭은입니다 valueForKey:방법 NSArray. 그러면 배열 ( myArrayOfCustomObjects) 을 반복 -state하고 각 개체 에서 메서드를 호출 하고 결과 배열을 만듭니다. 그런 다음 NSSet결과 상태 배열로 를 만들어 중복을 제거합니다.


iOS 5 및 OS X 10.7부터이 작업도 수행 할 수있는 새로운 클래스가 있습니다 NSOrderedSet.. 정렬 된 세트의 장점은 중복 항목을 제거 할뿐만 아니라 상대적인 순서도 유지한다는 것입니다.

NSArray *states = [myArrayOfCustomObjects valueForKey:@"state"];
NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:states];
NSSet *uniqueStates = [orderedSet set];

keypaths를 살펴 보십시오 . 그들은 매우 강력하며 대부분의 경우 NSPredicate 클래스 대신 사용합니다. 다음은 귀하의 예에서 사용하는 방법입니다 ...

NSArray *uniqueStates;
uniqueStates = [customObjects valueForKeyPath:@"@distinctUnionOfObjects.state"];

사용 주 valueForKeyPath 대신 valueForKey을 .

다음은 더 자세한 / 조언 된 예입니다 ...

NSDictionary *arnold = [NSDictionary dictionaryWithObjectsAndKeys:@"arnold", @"name", @"california", @"state", nil];
NSDictionary *jimmy = [NSDictionary dictionaryWithObjectsAndKeys:@"jimmy", @"name", @"new york", @"state", nil];
NSDictionary *henry = [NSDictionary dictionaryWithObjectsAndKeys:@"henry", @"name", @"michigan", @"state", nil];
NSDictionary *woz = [NSDictionary dictionaryWithObjectsAndKeys:@"woz", @"name", @"california", @"state", nil];

NSArray *people = [NSArray arrayWithObjects:arnold, jimmy, henry, woz, nil];

NSLog(@"Unique States:\n %@", [people valueForKeyPath:@"@distinctUnionOfObjects.state"]);

// OUTPUT
// Unique States:
// "california",
// "michigan",
// "new york"

참조 URL : https://stackoverflow.com/questions/1439564/iphone-getting-unique-values-from-nsarray-object

반응형