사전의 키 값으로 사전의 NSArray 정렬
사전으로 채워진 배열이 있고 사전의 키 중 하나의 값에 따라 알파벳순으로 배열을 정렬해야합니다.
이것은 내 배열입니다.
tu dictus: (
{
brand = Ryul;
productTitle = Any;
quantity = 1;
subBrand = "Ryul INJ";
type = Product;
},
{
brand = Trol;
productTitle = Different;
quantity = 2;
subBrand = "";
type = Brand;
},
{
brand = Dtor;
productTitle = Any;
quantity = 1;
subBrand = "";
type = Product;
},
{
brand = Ryul;
productTitle = Different;
quantity = 2;
subBrand = "Ryul CHES";
type = SubBrand;
},
{
brand = Anan;
productTitle = Any;
quantity = 1;
subBrand = "";
type = Product;
}
)
일반적으로 배열 정렬을 위해
myArray = [uniqueProdsArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
그러나 brand
사전 의 키를 사용하여 어떻게 정렬 합니까?
나는 이것이 그것을 할 것이라고 생각한다.
brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES];
sortDescriptors = [NSArray arrayWithObject:brandDescriptor];
sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
Sort Descriptor Programming Topics 에서 코드를 가져 왔습니다 . 또한, 코딩 키 - 값은 그에서 활동하기 시작 sortedArrayUsingDescriptors:
를 보내드립니다 valueForKey:
의 각 요소에 myArray
, 다음 반환 된 값을 정렬하는 표준 비교기를 사용합니다.
우리는 방법을 사용하여 해결책을 얻었습니다.
[self.jsonData sortUsingDescriptors: [NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:"fullname" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:"id" ascending:NO], nil]];
어디:-
jsonData
-파싱 된 JSON 데이터를 보유하는 MutableArray.
fullname
-정렬하려는 데이터.
id
-내부 사전과 함께 제공되는 고유 한 데이터입니다.
arrSorted = [arrBrand sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([[obj1 valueForKey:@"iUserId"] integerValue] > [[obj2 valueForKey:@"iUserId"] integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([[obj1 valueForKey:@"iUserId"] integerValue] < [[obj2 valueForKey:@"iUserId"] integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
switf에서 :
var descriptor: NSSortDescriptor = NSSortDescriptor(key: "brand", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])
사전에서 "brand"키를 사용하여 정렬하려면 다음 코드를 사용하십시오.
NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES];
NSArray * sortDescriptors = [NSArray arrayWithObject:brandDescriptor];
NSArray * sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
NSLog(@"sortedArray %@",sortedArray);
사전에서 두 개의 키를 정렬하려면 다음 코드를 사용하십시오. "브랜드"키와 사전의 productTitle 키처럼 :-
NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES];
NSSortDescriptor * productTitleDescriptor = [[NSSortDescriptor alloc] initWithKey:@"productTitle" ascending:YES];
NSArray * sortDescriptors = [NSArray arrayWithObjects:brandDescriptor, productTitleDescriptor, nil];
NSArray * sortedArray = [feedData sortedArrayUsingDescriptors:sortDescriptors];
NSLog(@"sortedArray %@",sortedArray);
QED의 코드에 추가로
NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES];
NSArray * sortedArray = [myArray sortedArrayUsingDescriptors:@[brandDescriptor]];
이것은 변수의 클래스를 명확하게하고 빠른 열거를 통해 배열 생성을 최적화합니다. 감사
내 코드를 사용할 때 충돌이 발생하여 NSSortDescriptor
"순위"가 NSNumber가 될 것으로 예상하는 사용 사례에서 잘 작동하는 블록을 사용 하게되었습니다. 개체를 정수로 변환 할 수없는 경우 정렬되지 않지만 충돌이 발생하지 않습니다.
NSArray *sortedArray = [data sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
long data1 = [[obj1 valueForKey:@"rank"] integerValue];
long data2 = [[obj2 valueForKey:@"rank"] integerValue];
if (data1 > data2) {
return (NSComparisonResult)NSOrderedDescending;
}
if (data1 < data2) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
NSSortDescriptor *brandDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"Position" ascending:YES selector:@selector(localizedStandardCompare:)] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:brandDescriptor];
NSArray *sortedArray = [arrTemp sortedArrayUsingDescriptors:sortDescriptors];
array_PreLagData=(NSMutableArray*)sortedArray;
unsorted array
Printing description of arrTemp:
<__NSArrayM 0x10282100>(
{
Milker2 = "11:03:17 AM";
Position = 2;
},
{
Milker1 = "11:03:28 AM";
Position = 25;
},
{
Milker3 = "11:03:18 AM";
Position = 3;
},
{
Milker1 = "11:03:16 AM";
Position = 1;
Strip = "11:32:32 AM";
},
{
Milker1 = "11:03:21 AM";
Position = 10;
}
)
Sorted array
<__NSArrayI 0x101363c0>(
{
Milker1 = "11:03:16 AM";
Position = 1;
Strip = "11:32:32 AM";
},
{
Milker2 = "11:03:17 AM";
Position = 2;
},
{
Milker3 = "11:03:18 AM";
Position = 3;
},
{
Milker1 = "11:03:21 AM";
Position = 10;
},
{
Milker1 = "11:03:28 AM";
Position = 25;
}
)
[enter link description here][1]
[1]: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html#//apple_ref/doc/uid/20001845-BAJEAIEE
당신은 이것을 할 수 있습니다.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"d LLLL yyyy"];
NSComparator compareDates = ^(id string1, id string2)
{
NSDate *date1 = [formatter dateFromString:string1];
NSDate *date2 = [formatter dateFromString:string2];
return [date1 compare:date2];
};
NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO comparator:compareDates];
[array sortUsingDescriptors:[NSArray arrayWithObjects:sortDesc1, nil]];
가장 쉬운 방법으로 시도해보세요 ...
myArray = [[NSMutableArray alloc] init];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
[tempArray removeAllObjects];
[tempArray addObjectsFromArray: myArray];
NSString *key = @"brand";
NSSortDescriptor *brandDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:brandDescriptor,nil];
NSArray *sortedArray = [tempArray sortedArrayUsingDescriptors:sortDescriptors];
[brandDescriptor release];
[tempArray removeAllObjects];
tempArray = (NSMutableArray*)sortedArray;
[myArray removeAllObjects];
[myArray addObjectsFromArray:tempArray];
신속한 4를 위해 이것을 사용하십시오
let sortedArray = arrayTobeSort.sorted {$0["keyName"].compare($1["keyName"]) == ComparisonResult.orderedAscending}
또한 ComparisonResult.orderedDescending 을 사용 하여 내림차순으로 정렬 할 수 있습니다.
'code' 카테고리의 다른 글
경로 대신 URL에 파일이 있는지 확인하십시오. (0) | 2020.11.30 |
---|---|
자산 속도 향상 : Rails 3.1 / 3.2 Capistrano 배포로 사전 컴파일 (0) | 2020.11.30 |
주어진 URL은 애플리케이션 구성에서 허용되지 않습니다. (0) | 2020.11.30 |
OrderedDict를 사용하지 않는 이유가 있습니까? (0) | 2020.11.30 |
Python Pandas : 데이터 프레임 열의 문자를 바꾸는 방법은 무엇입니까? (0) | 2020.11.30 |