2014-07-07 3 views
-1

동물 목록이 포함 된 NSarray이 있습니다. 배열에는 반복되는 요소가있는 동물 목록이 들어 있습니다. 배열에 고유 한 값을 가진 배열을 만들어야합니다. 반복되는 값은 NSPredicate을 사용하여 제거해야합니다.NSPredicate를 사용하여 NSStrings의 NSArray를 정렬하는 방법은 무엇입니까?

여기 내 코드입니다 : - 여기

NSArray *arrAnimals = [[NSArray alloc] initWithObjects:@"Cat",@"Rat",@"Fish",@"Cat",@"Fish",@"Cat",@"Cat",@"Bird",@"Fish",@"Cat",@"Frog", nil]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"distinct"]]; 
arrAnimals = [arrAnimals filteredArrayUsingPredicate:predicate]; 

내가 배열을 정렬하는 "독특한"키워드를 사용하지만, 어떤 해결책을 찾을 수 없습니다입니다. 많은 링크를 선호합니다.

http://www.infragistics.com/community/blogs/stevez/archive/2013/10/21/ios-objective-c-filtering-a-nsarray-using-nspredicate.aspx

내 문제를 해결하시기 바랍니다.

+0

중복을 제거하는 목표이다 , 또는 알파벳 순으로 정렬합니까? 아니면 둘다? –

+0

http://stackoverflow.com/questions/1351182/how-to-sort-a-nsarray-alphabetically – Yogendra

+0

Yaah 내 목표는 중복 항목을 제거하고 사전 순으로 정렬하는 것입니다. – Apoorv

답변

1

개체가있는 집합을 만들어 배열로 다시 변환하면 배열에서 중복을 제거 할 수 있습니다.

NSArray *arrAnimals = [[NSArray alloc] initWithObjects:@"Cat",@"Rat",@"Fish",@"Cat",@"Fish",@"Cat",@"Cat",@"Bird",@"Fish",@"Cat",@"Frog", nil]; 
NSArray *arrayWithoutDuplicates = [[NSSet setWithArray:arrAnimals] allObjects]; 
+0

이 코드는 저에게 효과적입니다. NSPredicate를 사용하지 않고 중복 값을 제거한 후 배열을 반환합니다. 감사합니다 – Apoorv

2

키 - 값 운영자가이에 대한 술어가 없지만, 당신이 사용할 수 있습니다

distinct = [array valueForKeyPath:@"@distinctUnionOfObjects.self"]; 
+0

키워드 "distinctUnionOfObjects.self"에 감사드립니다. 이 메소드는 정렬 된 배열을 반환합니다. 반복 된 값을 제거한 후 – Apoorv

+0

그것은 순서를 유지하므로 원래 배열이 정렬 된 경우에도 결과가 유지됩니다. – Tricertops

0

@iMartin 응답이 하나의 시도는

NSArray *arrAnimals = @[@"Cat",@"Rat",@"Fish",@"Cat",@"Fish",@"Cat",@"Cat",@"Bird",@"Fish",@"Cat",@"Frog"]; 

    arrAnimals= [arrAnimals valueForKeyPath:@"@distinctUnionOfObjects.self"]; 

    arrAnimals= [arrAnimals sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     unichar firstChar = [obj1 characterAtIndex:0]; 
     unichar secondChar = [obj2 characterAtIndex:0]; 

     if (firstChar == secondChar) { 
      return NSOrderedSame; 
     } else { 
      if (firstChar > secondChar) { 
       return NSOrderedDescending; 
      } else { 
       return NSOrderedAscending; 
      } 

     } 

    }]; 
관련 문제