0

私が欲しいものを一文で明確にする方法がわからないので、主題はあいまいです.

ここに行きます:

NSDictionaries の NSArray があります。各 NSDictionary は暦年の 1 日を表します。各 NSDictionary には、NSDate の値を持つキー「日付」があります。配列には 365 個の NSDictionary 項目が必要です。ディクショナリは、私が管理していないサーバーによって作成され、100 日も欠落している場合があります。

配列に 365 個の辞書が含まれていることを確認する必要があります。

私は現在、配列を日付でソートし、反復処理して、NSDictionaries を現在の配列から新しい配列にコピーしています。そうしながら、現在の辞書の日付値と次の辞書の日付値を比較します。2 つの日付の間に 1 日以上ある場合は、欠落している日をカバーするのに十分な数の新しい辞書を新しい配列に追加し (そしてそれに応じて日付を設定し)、次に進みます。

日付は順序付けられているはずなので、フレームワークまたは言語に、「ここに配列があり、このキーパスは連続している必要があります。不足しており、それらを初期化するために使用できるブロックまたはメソッドがあります。」

私の方法のどこかが実装が不十分だと感じているので、あなたに頼ります。考え?

ありがとう。

4

3 に答える 3

1

あなたが行った方法は完全に正気のように聞こえますが、私の知る限り、基本フレームワークで自動的にそれを行うものは何もありません.

于 2010-10-20T03:41:37.860 に答える
0

このコードはそれらをソートします。

NSArray *dates;  // wherever you get this...
NSArray *sortedDates = [dates sortedArrayUsingComparator:^(id obj1, id obj2) 
    {
    return [[obj1 valueForKey:@"date"] compare:[obj2 valueForKey:@"date"]];
    }];

不足しているエントリの作成に関しては、自分で行う必要があります。

于 2010-10-20T08:16:05.150 に答える
0

並べ替えを行う必要はありません。

  1. 365 個 (または 366 個) のプレースホルダー辞書を使用して配列を作成します (すべてのスロットに同じものを使用するか、NSNull を使用することができます)。
  2. 渡された配列を繰り返し処理し、各辞書がどの日のものであるかを調べます。各ディクショナリを配列内の適切なスロットに配置します。
于 2010-10-20T11:07:51.773 に答える