IOS为数字字段排序NSMutableArray

时间:2011-10-29 20:04:36

标签: ios sorting

我希望外面有人可以帮助我:

我有一个未排序的字典数组,里面有一个STRING字段(Km),其中包含数字(例如12,0; 1,2; 6,4)。如果我执行正常的SORT,则数组将按以下方式排序: 1,2 12,0 6,4

但它应该这样排序: 1,2 6,4 12,0

有人有一个示例代码怎么做? 我期待着得到答案。

谢谢和问候 马可

编辑我的代码以进一步理解:

NSMutableArray *tempArray = [[NSArray alloc] init];
self.Digger = tempArray;
[tempArray release];

self.Digger = [self.Diggers objectForKey:@"Rows"];

NSSortDescriptor * sort = [[[NSSortDescriptor alloc] initWithKey:@"KM" ascending:true] autorelease]; [self.Digger sortUsingDescriptors:[NSArray arrayWithObject:sort]];
self.Digger = sort;

但是这给了我日志中的以下错误: - [NSSortDescriptor count]:无法识别的选择器发送到实例

2 个答案:

答案 0 :(得分:3)

最好将数字作为NSNumbers而不是字符串放入字典中。这避免了两个问题:


1本地化如果是十进制数,1.2对1,2将根据用户在世界上的位置而有所不同。
2。数字的自然排序顺序是期望的。

NSArray *a = [NSArray arrayWithObjects:
              [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:12.0] forKey:@"Km"],
              [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat: 1.2] forKey:@"Km"],
              [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat: 6.4] forKey:@"Km"],
              nil];

NSSortDescriptor * sort = [[[NSSortDescriptor alloc] initWithKey:@"Km" ascending:true] autorelease];
NSArray *sa = [a sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
NSLog(@"sa: %@", sa);

NSLog输出:

2011-10-30 10:08:58.791 TestNoARC[86602:f803] sa: (
                                                   {
                                                       Km = "1.2";
                                                   },
                                                   {
                                                       Km = "6.4";
                                                   },
                                                   {
                                                       Km = 12;
                                                   }
                                                   )

答案 1 :(得分:0)

// assume toBeSorted is your array of dictionaries and the key for the int values is @"myInt"
NSSortDescriptor *sort = [[[NSSortDescriptor alloc] initWithKey:@"myInt" ascending:YES] autorelease];
[toBeSorted sortUsingDescriptors:[NSArray arrayWithObject:sort]];

这可以让你接近你想要的地方。 如果您总是使用非负数,则可以检查第一个对象是否代表您的0值并将其移动到数组的后面。