iOS NSArray 排序
Posted
技术标签:
【中文标题】iOS NSArray 排序【英文标题】:iOS NSArray Sorting 【发布时间】:2013-09-26 05:57:23 【问题描述】:我有一个嵌套数组,并希望通过内部数组中存在的键对其进行排序。
下面给出的是我想使用NSSortDescriptor
或其他方式排序的数组。
fares(
pid = 1;
type1 = (
color = "red";
size = "big";
properties = (
mod = "auto";
payment = "EMI";
moresegs = (
id = 141;
name = "abcd";
duration = "1 year"
)
)
);
type2 = (
color = "green";
size = "small";
properties = (
mod = "auto";
payment = "EMI";
moresegs = (
id = 141;
name = "abcd";
duration = "1 year"
)
)
)
pid = 1;
type1 = (
color = "red";
size = "big";
properties = (
mod = "auto";
payment = "EMI";
moresegs = (
id = 141;
name = "abcd";
duration = "1 year"
)
)
);
type2 = (
color = "green";
size = "big";
properties = (
mod = "auto";
payment = "EMI";
moresegs = (
id = 141;
name = "abcd";
duration = "1 year"
)
)
)
)
如何使用 "type2->properties->payment" 键对上述数组进行排序?
-------更新-----------
我修改了数组并使用 NSSortDescriptor 解决了我的问题
【问题讨论】:
请格式化您的代码。与计算机不同,我们人类无法阅读随意挥霍的文本。正确格式化并不难。去做吧。 【参考方案1】:试试这个:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"type1.size" ascending:YES];
NSArray *finalArray = [self.firstArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
【讨论】:
@PrafulKadam 只需将此答案中的“type1.size”替换为“type2.properties.payment”。这将按照你想要的方式对数组进行排序。 我认为这些问题已经过编辑。正如@Fogmeister 提到的,将“type1.size”更改为“type2.properties.payment” -[__NSArrayI compare:]:无法识别的选择器发送到实例 0x825f410【参考方案2】:通过将票价数组输入到此方法中来试试这个-
+(NSArray*)sortedListBySize:(NSArray*)_unsortedList
NSArray *sortedListBySize = [_unsortedList sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2)
if ([[obj1 valueForKeyPath:@"type2.properties.payments" ] intValue] < [[obj1 valueForKeyPath:@"type2.properties.payments"] intValue])
return NSOrderedAscending;
else if ([[obj1 valueForKeyPath:@"type2.properties.payments" ] intValue] > [[obj1 valueForKeyPath:@"type2.properties.payments"] intValue])
return NSOrderedDescending;
return NSOrderedSame;
];
return sortedListBySize;
【讨论】:
payments 不是 intvalue-> 这是我的假设。这就是我写 [payment(NSString) intValue] 的原因。你不需要使用它 - 只需使用 [obj1 valueForKeyPath:@"type2.properties.payments"] <.> 试过了,但它是随机排序的,而不是按付款键 我实际上将付款视为数量。您必须在此处指定所需的排序类型。 好的,假设它是像“10:00”,“02:30”这样的持续时间,......在这种情况下,我该如何排序,请您解释一下。我一直在努力解决这个问题 您必须从这些字符串构造 NSDate 对象并在块中比较它们。看到这个***.com/questions/805547/…以上是关于iOS NSArray 排序的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Objective-C:按字符串中的单词数对 NSStrings 的 NSArray 进行排序
根据对另一个 NSArray 字符串的排序,对自定义对象的 NSArray 进行排序