2

辞書のキー付きオブジェクトを使用して、辞書の配列を(可能な限りクイックソートに近い形で)並べ替える必要がありますが、辞書の複雑さ(キー値の数)とそれらに返すことができるデータのために必要ですディクショナリ内のキー設定された値のいくつかに基づいて各ディクショナリをソートできるようにします。

たとえば、array[0]のdictionaykeyvalue1、array [1]が等しい場合は、keyvalue2が等しいかどうかを確認し、等しい場合は、array[0]と[[0]と[ 1]オン。

NSSortDescriptorについて読み、昇順または降順を設定できる場所と比較するプロパティを指定しましたが、これを使用して、達成したいことを達成できるかどうかはわかりません。

私は私がしなければならないことの例を与えられましたが、それは私があまりよく知らないデルファイにあります、しかしその例は私がやろうとしていることについての洞察を与えると思います。

//
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

4

1 に答える 1

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
} ];

たとえば、気にしたのは「名前」プロパティだけだったとします。

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

この手法の本当に良い点は、ロジックが任意に複雑になる可能性があることです。

于 2012-08-07T00:44:37.217 に答える