2

パラメータを持つNSMutableArrayオブジェクトがあります。このパラメータでオブジェクトを並べ替える必要があります。LinkByte taskOne

    for (Byte i = 0; i < [linksArray count]-1; i++) {
        Link *l = [linksArray objectAtIndex:i];
        Link *lNext = [linksArray objectAtIndex:i+1];
        if (l.taskOne >= lNext.taskOne) {
            NSLog(@"%d >= %d", l.taskOne, lNext.taskOne);
            [linksArray replaceObjectAtIndex:i withObject:lNext];
            [linksArray replaceObjectAtIndex:i+1 withObject:l];
        }
    }

これは私に間違った結果を与えますが、私は何が悪いのかわかりません。助けてくれてありがとう。

4

2 に答える 2

5

配列を並べ替える最も簡単な方法はNSSortDescriptor、次のようにKVCで使用することです。

NSArray *linksArray;    // Assume that this contains objects which respond to the -taskOne method

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"taskOne" ascending:YES];
NSArray *sortedLinks = [linksArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

これにより、新しいアレイが作成されます。NSMutableArrayインプレースを並べ替えるには、次のようにします。

NSMutableArray *linksArray; // Assume that this contains objects which respond to the -taskOne method

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"taskOne" ascending:YES];
[linksArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
于 2012-05-22T08:40:30.520 に答える
1

これは一種のバブルソートのように見えますが、2つのループが必要です。現在、配列を1回実行し、最上位のオブジェクトは最新のインデックスにある必要があります。次に、長さが-1になるまで配列を実行する必要があります。次のようなものを試してください:

for (Byte j = 1; j < [linksArray count]; j++) {
    for (Byte i = 0; i < [linksArray count]-j; i++) {
        //your code from above
    }
}
于 2012-05-22T08:41:29.833 に答える