ios - NSString에서 중복 된 단어를 제거하고 새 NSString으로 저장

기사 출처 ios objective-c nsstring nsmutablearray nsarray

여러 단어를 포함하는 NSString이있을 수있는 시나리오가 있는데 그중 일부는 중복됩니다. 내가 원하는 것은 다음과 같은 문자열을 취하는 것입니다.

One Two Three Three Three Two Two Two One One Two Three


다음과 같이 만드십시오.

One Two Three


원래 NSString의 정확한 길이도 다를 수 있습니다. 내가 지금까지 가지고있는 것은 :

NSString *hereitis = @"First Second Third Second Third First First First";
    NSArray *words = [hereitis componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSCountedSet *countedSet = [NSCountedSet setWithArray:words];
    NSMutableArray *finalArray = [NSMutableArray arrayWithCapacity:[words count]];

for(id obj in countedSet) {
    if([countedSet countForObject:obj] == 1) {
        [finalArray addObject:obj];
    }
}
NSString *string = [finalArray componentsJoinedByString:@" "];
NSLog(@"String%@", string);


그러나 이것은 단어가 아닌 내 배열의 문자열을 반환합니다.
이것은 실제로 덜 고통스럽지 않게 할 수 있습니다. NSSet은 중복 항목을 허용하지 않습니다. 따라서 문자열을 배열로 나누고 해당 배열을 사용하여 집합을 만들 수 있습니다. 거기에서해야 할 일은 다시 변환하는 것뿐입니다. 그러면 복제가 제거됩니다.

NSString *inputString = @"One Two Three Three Three Two Two Two One One Two Three";
NSSet *aSet = [NSSet setWithArray:[inputString componentsSeparatedByString:@" "]];
NSString *outputString = [aSet.allObjects componentsJoinedByString:@" "];

NSLog(@"___%@___",outputString); // Outputs "___One Two Three___"

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/24436806/

관련 기사
ios - SpriteKit : 전체 노드 겹침 감지
ios - Swift에서 두 개의 CGFloat의 최소값을 얻으려면 어떻게해야합니까? [복제]
ios - 루프에서 사전에 객체를 추가하면 이전 값을 덮어 씁니다.
ios - CoreData에서 타임 스탬프로 저장되는 NSDate
ios - iOS TableView는 모든 셀에 동일한 개체를 표시합니다.
ios - IOS UITableViewCells 모두 첫 번째 셀에서 뒤죽박죽, Iphone5S 장치 만 해당, 64 비트 시뮬레이터
ios - XAMARIN의 UIScrollView에서 UIView 제거
ios - 사용되지 않는 AudioSessionSetProperty 대체
ios - iAd에 광고가 표시되지 않음
ios - UISearchDisplayDelegate 메서드가 호출되지 않았습니다.