2013-08-12 2 views
1

날짜, 이름 및 금액 인 세 개의 값을 보유하는 데이터로 객체를 포함하는 NSMutableArray가 있습니다. 금액을 사용하여 데이터로 객체를 포함하는 NSMutableArray를 정렬하는 방법

그래서 내 배열이 코드 양

[tableAry sortUsingDescriptors:[NSArray arrayWithObject: 
[NSSortDescriptor sortDescriptorWithKey:@"amount" 
ascending:NO selector:@selector(caseInsensitiveCompare:)]]]; 

를 들어

를 사용하여 데이터를 정렬하고있어 지금이

date name amount 
08/12 atest 1000 
08/13 btest 200 
08/14 ctest 3000 
08/15 dtest 4000 
08/13 etest 5000 

같이하지만 내 200 기록보다 더 큰 것을 말한다 1000 레코드 정렬 된 데이터는 다음과 같습니다.

5000 
4000 
3000 
200 
1000 
+1

가능한 중복을 [ NSSortDescriptor를 사용하여 NSString 값을 NSSortDescriptor로 정렬하는 것처럼 NSSString 값 정렬] (0120-388-3300) NSSortDescriptor를 사용하여 NSString 값을 정렬하는 것과 같습니다. –

+0

원래 질문에 http : //에 대한 링크가있었습니다. (편집기에 의해 제거 된) stackoverflow.com/questions/9943970/nssortdescriptor-sort-with-number-as-string. 왜 그게 도움이되지 않았습니까? –

+0

@MartinR 당신이 바로 전에 비슷한 질문을했고 편집자에 의해 삭제되지 않았지만 문제는 내 코드에서 작은 오타 때문에 발생했기 때문에 철자 오류를 수정하여 해결했습니다. 하지만 난 내 정렬 함수를 테스트하지 않은 나는 그것을 테스트했을 때 나는 내 코드가 금액으로 정렬 할 것을 보았지만 예상과 다르게 나는이 질문을 다른 데이터와 함께 게시했다. 나의 첫 번째 질문은 효과가있는 날짜 정렬과 두 번째 질문은 properlly 금액 데이터를 정렬하지에 관한 것입니다. – Dilip

답변

5

금액이 NSString 값으로 저장되어있는 것처럼 보입니다. 당신은 당신이 링크 된 기술자에 intValue을 추가하여 주위, 또는 직장 (숫자 NSNumber로 저장 사람과 숫자의 문자열 표현을 대체하여 즉)이 질문에 설명 된 방법으로 고칠 수 :의

[tableAry sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"amount.intValue" ascending:NO]]]; 
+0

하지만 아마도 selector : @selector (caseInsensitiveCompare :)를 사용하지 않고 정수를 비교할 것입니다. –

+0

@ MartinR 네가 맞아! 내가 복사 한 것을 읽어야한다는 것을 안다. 그러나 나는이 실수를 반복한다. 감사! – dasblinkenlight

+0

내 대답을 제안 했음에도 불구하고, 나는 이것을 투표했습니다. 제가 제안한 대답보다 훨씬 더 우아합니다. – mluisbrown

1

금액을 숫자가 아닌 문자열로 비교합니다. 문자열 200은 알파벳순 정렬 규칙에 따라 1000 문자열보다 '큼'입니다.

이것은 고전적인 "문자열을 숫자로 정렬"버그입니다.

참조한 the question에 대한 답변은 문제를 해결하는 방법입니다.

관련 문제