2016年会把自己在CSDN上的一些 东西慢慢移动到简书来,都是自己在项目中用到的一些知识点.
数组排序的几种方法
数据源
NSMutableArray *array1 = [[NSMutableArray alloc ]initWithObjects:
@{@"name":@"a",@"sex":@"22"},
@{@"name":@"b",@"sex":@"32"},
@{@"name":@"c",@"sex":@"25"},
@{@"name":@"d",@"sex":@"45"},
@{@"name":@"e",@"sex":@"56"},
@{@"name":@"j",@"sex":@"23"},
@{@"name":@"f",@"sex":@"67"},
@{@"name":@"h",@"sex":@"23"},
@{@"name":@"h",@"sex":@"234"},
@{@"name":@"h",@"sex":@"2345"},
@{@"name":@"h",@"sex":@"4562"},
@{@"name":@"h",@"sex":@"12312"},
@{@"name":@"h",@"sex":@"324"},
@{@"name":@"h",@"sex":@"3"},
@{@"name":@"h",@"sex":@"1"},
@{@"name":@"h",@"sex":@"67456"},
@{@"name":@"h",@"sex":@"3422"},
@{@"name":@"h",@"sex":@"23344"},
@{@"name":@"h",@"sex":@"3456"},
@{@"name":@"h",@"sex":@"82"},
nil nil];
1.冒泡排序写俩for循环
NSDictionary *t;
for (int i = 0; i<[array1 count]-1; i++) {
for (int j =0; j<[array1 count]-i-1; j++) {
NSInteger data1 = [array1[j+1][@"sex"]intValue];
NSInteger data2 = [array1[j] [@"sex"]intValue];
if (data1 == MIN(data1, data2)) {
t = [array1 objectAtIndex:j+1];
//对数组里的数据逆序存放
[array1 exchangeObjectAtIndex:j+1 withObjectAtIndex:j];
[array1 replaceObjectAtIndex:j withObject:t];
}
}
}
2.利用 NSSortDescriptor 类
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sex" ascending:YES];
[array1 sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
注意的地方:
这里YES是代表升序,降序变成NO。有点要说明下,这个类这么写进行排序只是根据第一个数字去排序比如:1,32,123,23 利用他排序后的结果是 , 1,123,23,32字母也是一样。
3.NSComparator
NSComparator cmptr = ^(id obj1, id obj2){
NSString *t1=obj1[@"sex"];
NSString *t1=obj2[@"sex"];
if ([t1 doubleValue]<[t2 doubleValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([t1 doubleValue]>[t2 doubleValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
};
在要适当的地方,用数组调用:
[array1 sortUsingComparator:cmptr];
记录下以后方便使用.
随机获取数组中五个不同的元素
- (NSArray*)getRandomServiceWithList:(NSArray*)array
{
NSMutableSet *randomSet = [[NSMutableSet alloc] init];
while ([randomSet count] < 5) {
int r = arc4random() % [array count];
[randomSet addObject:[array objectAtIndex:r]];
}
return [randomSet allObjects];
}