1

ソートとマージの問題の1つで混乱しています。私の問題を次のように説明しましょう。

ステップ 1. アレイがあります。配列の構造を理解するために、配列のコンソールログを書いているだけです。

(
    {
        id_ = 1,
        name_ = "some xyz name",
        date_ = "2012/01/24 05:25:30 AM"
    },
    {
        id_ = 2,
        name_ = "some ABC name",
        date_ = "2012/01/25 06:25:30 AM"
    },
    {
        id_ = 1,
        name_ = "some PQR name",
        date_ = "2012/01/22 04:30:30 AM"
    },
)

ステップ 2. したがって、配列の上に並べ替えるために、次のコードを配置しました。

NSArray *myArray = // someHow I get those values listed above.
NSSortDescriptor *sortD1=[[NSSortDescriptor alloc] initWithKey:@"date_" ascending:YES];
myArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortD1]];

ステップ 3. これで、並べ替えられた配列の完全なセットができました。

ステップ 4. 同様の種類の別のアレイがあります。

(
    {
        obj_id_ = 11,
        obj_date_ = "2012/01/24 05:25:30 AM"
    },
    {
        obj_id_ = 21,
        obj_date_ = "2012/01/23 05:25:30 AM"
    },
    {
        obj_id_ = 17,
        obj_date_ = "2012/01/21 05:25:30 AM"
    },
)

ステップ 5. したがって、配列の上でソートするために、次のコードを配置しました。

NSArray *myArray2 = // someHow I get those values listed above.
NSSortDescriptor *sortD2=[[NSSortDescriptor alloc] initWithKey:@"obj_date_" ascending:YES];
myArray2 = [myArray2 sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortD2]];

ステップ 6. 両方のアレイをマージする必要がありますが、日付に基づいてソートする必要があります。

(
    {
        obj_id_ = 17,
        obj_date_ = "2012/01/21 05:25:30 AM"
    },
    {
        id_ = 1,
        name_ = "some PQR name",
        date_ = "2012/01/22 04:30:30 AM"
    },
    {
        obj_id_ = 21,
        obj_date_ = "2012/01/23 05:25:30 AM"
    },
    {
        id_ = 1,
        name_ = "some xyz name",
        date_ = "2012/01/24 05:25:30 AM"
    },
    {
        obj_id_ = 11,
        obj_date_ = "2012/01/24 05:25:30 AM"
    },
    {
        id_ = 2,
        name_ = "some ABC name",
        date_ = "2012/01/25 06:25:30 AM"
    }
)

期待される出力は、上記のとおりです。異なるキー値を持つ2つの異なる配列をマージするロジックがわかりません。これのロジックを構築しようとしていますが、空の配列と間違ったものを返します。ですから、ここには掲載しません。

注:この質問が重複している場合は、反対票を投じる前に、コメントでお知らせください。私はそれを削除します & 必要なリンクとサポートに感謝します. :)

4

1 に答える 1

3

最初に、渡されたオブジェクトに応じて日付を返す関数を定義します。

- (NSDate *)dateForObject:(id obj) {
    if ([obj class] == [MyClass1 class]) {
        return ((MyClass1) obj).date_;
    }
    else {
        return ((MyClass2) obj).obj_date_;
    } 
}

次に、ブロックを使用して並べ替えます。

NSArray *sortedArray;
sortedArray = [mergedArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *aDate = [self dateForObject:a];
    NSDate *bDate = [self dateForObject:b];        
    return [aDate compare:bDate];
}];
于 2012-11-16T06:18:42.810 に答える