NSSortDescriptor 사용
가령 지금 이런 수요가 있다고 가정하면 수조 안에 10개의 Person 대상이 있고 각 Person 대상은 자신의 이름과 나이, 점수가 있다. 우리는 수조 안에 있는 10개의 대상에 대해 다음과 같은 정렬 조작 규칙을 해야 한다.
1. 먼저 나이순으로 나눈다.나이가 같으면 점수순으로.
이 요구를 실현하려면 NSSortDescriptor라는 대상을 몰랐으면 코드를 많이 썼을 텐데 이 대상을 빌려서 저희가 위의 요구를 쉽게 실현할 수 있을 거예요.
먼저 Person 클래스를 만들어야 합니다. 이름, 연령, 점수 등 세 가지 속성을 포함하여 Person 대상 코드를 신속하게 만드는 구조 방법을 제공합니다.
#import
@interface Person : NSObject
@property(nonatomic,strong)NSString *name;
@property(nonatomic,assign)NSInteger age;
@property(nonatomic,assign)float score;
- (instancetype)initWithName:(NSString*)name age:(NSInteger)age score:(float)score;
@end
#import "Person.h"
@implementation Person
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age score:(float)score
{
if (self = [super init]) {
self.name = name;
self.age = age;
self.score = score;
}
return self;
}
@end
다음은 ViewController(ViewController는 UItableview Controller를 계승하고 프로그램과 컨트롤러는 네비게이션 컨트롤러이다)에서 다음과 같은 몇 가지 일을 합니다.
@interface ViewController ()
@property(nonatomic,strong)NSMutableArray *datas;
@end
그런 다음 데이터 로드를 게을리합니다.
- (NSMutableArray *)datas
{
if (!_datas) {
_datas = [NSMutableArray array];
Person *p1 = [[Person alloc] initWithName:@"jack" age:20 score:97];
Person *p2 = [[Person alloc] initWithName:@"anne" age:8 score:33];
Person *p3 = [[Person alloc] initWithName:@"zhng" age:54 score:11];
Person *p4 = [[Person alloc] initWithName:@"tuoma" age:76 score:54];
Person *p5 = [[Person alloc] initWithName:@"gril" age:95 score:12];
Person *p6 = [[Person alloc] initWithName:@"boy" age:21 score:76];
Person *p7 = [[Person alloc] initWithName:@"big" age:53 score:98];
Person *p8 = [[Person alloc] initWithName:@"hack" age:33 score:66];
Person *p9 = [[Person alloc] initWithName:@"zoom" age:33 score:21];
Person *p10 = [[Person alloc] initWithName:@"right" age:69 score:88];
[_datas addObject:p1];
[_datas addObject:p2];
[_datas addObject:p3];
[_datas addObject:p4];
[_datas addObject:p5];
[_datas addObject:p6];
[_datas addObject:p7];
[_datas addObject:p8];
[_datas addObject:p9];
[_datas addObject:p10];
}
return _datas;
}
그런 다음 ViewController 에 다음 코드를 입력하여 이 데이터를 보여 드리겠습니다.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.datas.count;
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
}
Person *p = self.datas[indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@" :%@ :%zd",p.name,p.age];
cell.detailTextLabel.text =[NSString stringWithFormat:@"%f", p.score];
return cell;
}
-----------------------------중점-------------------------------------
다음 순서는 다음과 같습니다.
규칙은 다음과 같습니다.우선 나이순으로 2.나이가 같으면 점수에 따라 정렬을 해야 합니다. 한 설명은 한 속성만 설명할 수 있습니다. 여러 설명이 필요하면 여러 설명자를 만들어야 합니다.
여기서 필요한 것은 두 명의 설명자를 만들어야 한다. 하나는 나이에 대한 설명이고 하나는 점수에 대한 설명 코드이다.
NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];//ascending:YES NO
NSSortDescriptor *scoreSD=[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
이 두 설명자를 만들면sortedArrayUsingDescriptors 방법을 호출해서 정렬할 수 있습니다
sortedArrayUsingDescriptors
방법은 하나의 수조의 매개 변수에 설명자를 넣은 다음에 정렬된 수조로 되돌아오기 때문에 우리는 이렇게 한다.self.datas = [[self.datas sortedArrayUsingDescriptors:@[ageSD,scoreSD]] mutableCopy];
탐색 모음의 왼쪽에 있는 정렬 버튼을 클릭하면 다음과 같은 작업이 수행됩니다.
- (IBAction)sortAge:(id)sender {
NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
NSSortDescriptor *scoreSD=[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
self.datas = [[self.datas sortedArrayUsingDescriptors:@[ageSD,scoreSD]] mutableCopy];
[self.tableView reloadData];
}
총괄: (1) 하나의 묘사는 하나의 속성만 묘사할 수 있다. 만약에 여러 개의 묘사가 필요하다면 우리는 여러 명의 묘사자를 만들어야 한다.
NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];//ascending:YES NO
(2) 이 두 설명자를 만들면 우리는 수조의sortedArrayUsingDescriptors 방법을 호출하여 정렬을 실현할 수 있다. - - - -> 정렬된 수조를 되돌려준다.
self.datas = [[self.datas sortedArrayUsingDescriptors:@[ageSD,scoreSD]] mutableCopy];
(3) 데이터 갱신
[self.tableView reloadData];
문장에 참고하다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.