2012-01-22 5 views
0

私の配列は、ある位置にある値で配列をソートする必要があります。 私のやり方はおそらく長すぎます。短くてスマートなアルゴリズムを使って配列に挿入する

私が持っている:その作業

for(int i=0;i<100;i++) 
     [whatBondInFrame addObject:@"no"]; 



     [whatBondInFrame insertObject:@"red" atIndex:0]; 
     [whatBondInFrame insertObject:@"red" atIndex:1]; 
     [whatBondInFrame insertObject:@"red" atIndex:2]; 
     [whatBondInFrame insertObject:@"gray" atIndex:10]; 
     [whatBondInFrame insertObject:@"gray" atIndex:11]; 
     [whatBondInFrame insertObject:@"gray" atIndex:12]; 
     [whatBondInFrame insertObject:@"red" atIndex:20]; 
     [whatBondInFrame insertObject:@"red" atIndex:21]; 
     [whatBondInFrame insertObject:@"red" atIndex:22]; 

をしかし、私はもっと入れたい場合、私はより多くの行が必要になります。 は今、私はこのようなものを使用する場合:それは私が持っていた全データが消去されます

whatBondInFrame = [NSArray arrayWithObjects: @"Red", @"Green", @"Blue", @"Yellow", nil]; 

を、ここで私は右のインデックスに入れて傾けます。これは要素が対称型ではありません原因提案のためのforループ

1行にしたインデックスにオブジェクトを配置する別のAPIがある(このようなものの、インデックスとは?)

Aは良くありません。

ありがとうございました。しかし互いに素インデックスのコレクションからNSIndexSetを作成するための 『1行』の方法が存在しない

- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects 

+3

あなたの質問は明確ではありません:配列を並べ替えるか、特定のオブジェクトを特定の位置に配置するかどうか分かりません。あなたの目標は何ですか? – Saphrosit

+0

@Saphrosit私の目標は、開始時にすべて "@" "いいえ"という値を持つ100個のインデックスの配列を持つことです。その後、特定のインデックスのみを必要な値に変更したいのですがそれはある行にある。 – Curnelious

+0

1)エントリを変更するには、[replaceObjectAtIndex:withIndex:](http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#// apple_ref/occ/instm/NSMutableArray/replaceObjectAtIndex:withObject :)を参照してください。 2)私はまだあなたが何を意味するのかを知ることはできません。「しかし、それを一列にしてください」。*詳しく説明してください。例を挙げてください。 – DarkDust

答えて

1

あなたがやりたいことに近いAPIはNSMutableArray年代です。

あなたは本当に "1行"(なぜそうですか?)か、または簡単に挿入するために一定のインデックス/値のペアのコレクションを維持し過ぎていますか?後者の場合、次のようなものを使用できます:

typedef struct { NSUInteger index, NSString *value } IndexValue; 

IndexValue entries[] = { {0, @"red"}, {10, @"gray}, ... }; 

int count = sizeof(entries)/sizeof(IndexValue); // number of elements in the array 
for(int ix = 0; ix < count; ix++) 
    [whatBondInFrame replaceObjectAtIndex:entries[ix].index withObject:entries[ix].value]; 

これで、簡単に編集できるインデックスと値のペアを1つの場所に定義できます。

関連する問題