2011-12-31 9 views
5

私は2つのNSMutableArraysを持っています。最初の内容は数値で、2番目の内容と対になります。1つに基づいて2つのNSMutableArraysを注文します

First Array Second Array 
    45    Test45 
    3    Test3 
    1    Test1 
    10    Test10 
    20    Test20 

これは両方の配列の外観です。さて、私はそれらを数字で並べることで、どのようにすればいいのですか?

First Array Second Array 
    1    Test1 
    3    Test3 
    10    Test10 
    20    Test20 
    45    Test45 

ありがとう!

+2

これは「インデックスソート」と呼ばれます。奇妙なことに、Objective-Cや他のほとんどの環境でこれを行うためのライブラリルーチンはありませんが、要件がかなり頻繁に現れています。したがって、最も簡単な方法は、エントリを別のオブジェクト(First Array要素/ Second配列要素)に配置し、それらのオブジェクトを並べ替えて配列を再構成することです。それ以外の場合は、独自のソートルーチンを記述する必要があります。 –

+0

申し訳ありませんが、私はそれを理解していませんでした:(これは配列の並べ替えを処理する初めてのので、わかりません:( – pmerino

答えて

17

2つの配列をキーと値として辞書に入れます。次に、最初の配列(辞書のキーとして機能する)をソートし、同じ順序で辞書の値にすばやくアクセスできます。これは、最初の配列のオブジェクトがNSCopyingをサポートしている場合にのみ有効であることに注意してください。その理由は、NSDictionaryが機能するからです。

次のコードを実行してください。 NSDictionaryは便利な方法をいくつか提供しているので、実際はかなり短いです。

+3

非常にいいコードですが、キーがない場合は処理しませんユニーク。 –

8

2つの並列配列を維持するのではなく、モデルオブジェクトの単一の配列を保持します。最初の配列の各数値は1つのプロパティの値になり、2番目の配列の各文字列はもう1つのプロパティの値になります。 sort descriptorsを使用して、いずれかまたは両方のプロパティを並べ替えることができます。

一般に、ココアとココアタッチでは、モデルオブジェクトが作業を節約しながら並列配列が機能します。あなたができるところでは、後者を前者よりも好む。

関連する問題