1

私は 2 つの NSMutabeArrays を持っています。1 つは数字でいっぱいで、もう 1 つは単語でいっぱいです。

2 つの配列が次のようになっているとします。

1  hello
24 no
11 there
5  boo

ここで、最初の配列を並べ替えて、数字が降順になるようにします (以下のように、単語が関連付けられている元の数字のままになるように、単語を数字と共に移動させます)。

24 no
11 there
5  boo
1  hello

どうすればこれを達成できますか?ありがとう。

4

3 に答える 3

4

数字と単語を組み合わせて、両方のプロパティを持つ単一のオブジェクトにする必要があります。その後、2 つの独立した配列を調整しようとするのではなく、これらのオブジェクトの順序付けられた配列を維持できます。

これを実現する 1 つの方法は を使用することですが、NSDictionary通常は単純なモデル オブジェクトを使用して 2 つの値を保持することをお勧めします。

@interface SomeObject : NSObject
@property (nonatomic, readwrite, strong) NSString *word;
@property (nonatomic, readwrite, assign) NSUInteger number;
@end

@implementation SomeObject
@synthesize word=_word;
@synthesize number=_number;
@end

このオブジェクトを作成する方法は他にもありますが (たとえば、不変にすることもできます。これはマルチスレッド アプリに適しています)、これが最も簡単です。

于 2012-06-25T14:54:44.940 に答える
1

これら 2 つの配列は明らかに非常に密接に結合されているため、並べ替えルーチンの実装に埋め込むだけでなく、この結合をプログラム設計に反映する必要があります。これを行う最善の方法は、ソリューションを適合させる必要があるコンテキストによって異なります。単一のアレイ ソリューションが最適な場合もあれば、そうでない場合もあります。別の可能な解決策は、2 つの配列を含み、並べ替え、挿入、削除などの際に一貫性を維持する責任を負う新しいクラスを作成することです。

于 2012-06-25T15:11:48.607 に答える
0

最適な答えではありませんが、確かに私が複数列のテーブルを実装した方法です(任意の列で並べ替えることができます)。

コード自体がプラットフォーム間でより移動しやすいように、私はこの方法でマイニングしました。

これを行う方法は、インデックスマッピング配列を保持することです。これが機能する方法は、dataArray1とdataArray 2です。dataArray1で並べ替える場合は、(dataArray1を並べ替えるときに)新しいマップされたインデックスをマッピング配列に保持します。並べ替えが完了すると、マッピング配列によって保持されるデータは、マッピング配列のインデックスの位置に配置する必要があるdataTable2のインデックスになります。

データの結合について話している答えがたくさんあります。これは、データを実際にどのように使用するかによって大きく異なります。私の設計では、データはテーブルビュー(およびテーブルの表示)に表示される場合にのみ結合する必要がありましたが、グラフビュー内では、データの順序はこのように重要ではなかったため、結合は必要ありませんでした。ここには良い答えがたくさんあると思います。問題は、このデータを中心に何を設計しているのかということです。

于 2012-06-25T15:15:48.523 に答える