3

私は現在、Objective-C を自分自身に教えようとしており、配列を並べ替える必要がある演習をいじっていました。

次のコードを使用して、なんとか完了しました。

NSSortDescriptor * newSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE];
NSArray *sortDescriptors = [NSArray arrayWithObject:newSortDescriptor];
[self.theBookStore sortUsingDescriptors:sortDescriptors];

私の質問は、ここで実際に何が起こっているかについてです。私は自分が何をしたのか正確には理解していません。

行 1: ここで、記述子を持つ新しいオブジェクトを作成したことを理解しました。これには、並べ替えたい列と昇順の 2 つのパラメーターがあります。

行 2: これは、私が混乱している行です。なぜソート記述子の配列が必要なのですか? このコードを読むと、行が 1 つだけの配列が作成されると思いますが、それは正しいですか?

3 行目: これが sortUsingDescriptors メソッドを呼び出していることは理解していますが、この関数が配列を想定している理由がわかりません。

ドキュメントを読みましたが、簡単な説明を本当に探しています。

どんな助けでも大歓迎です

4

3 に答える 3

5

1行目:ここで、記述子を持つ新しいオブジェクトを作成したことを理解しました。これには2つのパラメーターがあります。並べ替える列と、昇順の列です。

実際には、記述子であるオブジェクトを作成しました。配列をソートする方法について説明します。

2行目:これは私が混乱している行です。ソート記述子の配列が必要なのはなぜですか?このコードを読んだとき、1行だけの配列が作成されているのではないかと思います。

右-単一のオブジェクトを含む配列を作成しました。本当に多くのフィールドでソートしたい場合は、10、15、または87のソート記述子を持つ配列を作成できます。多くの場合、1つ、2つ、おそらく3つを使用します。したがって、人のリストを並べ替える場合は、姓と名を指定する並べ替え記述子を追加できます。そうすれば、同じ名前の人がそのグループ内で自分の名前に従って配置されます。

3行目:これがsortUsingDescriptorsメソッドを呼び出していることは理解していますが、繰り返しになりますが、この関数が配列を予期しているのは混乱です。

繰り返しになりますが、これは、プライマリ、セカンダリ、ターシャリ(など)のソートキーを使用できるようにするためです。1つのキーのみで並べ替える場合は、配列ではなく1つの並べ替え記述子を使用する別のメソッドを使用できます。NSArrayはそれを提供しませんが、必要に応じていつでもカテゴリに追加できます。

@category NSArray (SingleSortDescriptor)

- (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor;

@end

@implementation NSArray (SingleSortDescriptor)

- (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor
{
    return [self sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
}

@end
于 2012-04-13T14:55:31.990 に答える
2
  • 1行目:..はい、あなたの権利です。と呼ばれるカスタムオブジェクトを作成していますNSSortDescriptor。そのオブジェクトは、並べ替える属性を定義します。「タイトル」を入力しました。したがって、array-to-sort内のオブジェクトは、そのプロパティ(yourObject.title "kind-of")の後に並べ替えられます。

  • 2行目:並べ替え方法(sortUsingDescriptors)には常に配列が必要なため、1つのオブジェクトのみでNSArrayを作成する必要があります。さて、...ちょっとばかげているように見えます。しかし、絶対に理にかなっています。2つの基準(「タイトル」、「都市」の順に言う)の後にソートしたいとします。

  • 3行目:はい、複数の基準の後に並べ替えるため、ここは配列である必要があります。

そして、常にメモリをクリーンに保ちます。1行目で、NSSortDescriptorを割り当て/初期化しました。したがって、使用後にクリーンアップします( ARCを使用していない場合)。したがって、行を追加します。

[newSortDescriptor release];
于 2012-04-13T14:47:50.590 に答える
1

複数のソート記述子を使用して、複数の一致がある場合に何が起こるかを解決します。私は優先順位です。2 番目の記述子は、2 つのタイトルが同じであることがわかった場合の対処方法を示します。

于 2012-04-13T14:49:09.510 に答える