如何根据字典的几个属性对字典数组进行排序

时间:2012-08-06 23:39:38

标签: iphone ios nsarray nsdictionary nssortdescriptor

我需要使用字典中的键控对象对字典数组进行排序(尽可能接近快速排序),但由于字典的复杂性(键控值的数量)和可以返回的数据他们需要能够根据字典中的几个键控值对每个字典进行排序。

例如,假设如果数组[0]中的dictionay keyvalue1,数组[1]相等,则检查keyvalue2是否相等,如果是,则继续按下键值列表,直到可以对数组排序的两个项目[0 ]& [1] on。

我已阅读有关NSSortDescriptor并指定要与您可以设置升序或降序的位置进行比较的属性,但我不确定这是否可用于实现我想要实现的目标。

我已经得到了一个我需要做的例子,但它在delphi中,我不是很熟悉,但我认为这个例子给出了一些关于我想要做什么的见解。

//
Result := AnsiCompareText (left.property1, right.Property1);
if Result <> 0 then Exit;
Result := AnsiCompareText (left.property2, right.Property2);
if Result <> 0 then Exit;
Result := AnsiCompareText (left.property3, right.Property3);
if Result <> 0 then Exit;
Result := AnsiCompareText (left.property4, right.Property4);
if Result <> 0 then Exit;
Result := AnsiCompareText (left.property5, right.Property5);
if Result <> 0 then Exit;
//

希望这会让你对我想要达到的目标有所了解,任何帮助都会非常感激,现在已经坚持了一段时间,如果你知道目标C中的类似解决方案我会很乐意听到它! :P

1 个答案:

答案 0 :(得分:3)

让我们假设您有一个可变数组。然后你用这个:

[myArray sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2)
{
  // you have two items - use whatever complex logic you want, then return
  // one of NSOrderedAscending, NSOrderedSame, NSOrderedDescending
} ];

例如,假设你所关心的只是一个名字&#34;属性:

[myArray sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2)
{
  NSString *n1 = [d1 objectForKey:@"name"];
  NSString *n2 = [d2 objectForKey:@"name"];
  return [n1 localizedCompare:n2];
} ];

这种技术非常好用的是逻辑可以是任意复杂的。