2

客観的な共同作業を学習するための補助として、定期的な体重測定値を保存および表示する iOS アプリを設計しています。測定オブジェクトの共有ストアの可変配列を返すシングルトンがあります。各測定値には少なくとも日付と体重があり、過去の測定値を追加できるようにしたいと考えています。

測定値を日付順に表示したいと思います。これを行う最善の方法は何ですか?私が見る限り、オプションは次のとおりです。1) 測定値を追加するとき - 測定値が追加されるたびに addobject をオーバーライドして共有ストアをソートする、2) mutablearray を取得するときにソートする、または 3) 取得するたまたま共有ストアにある順序で可変配列を取得し、テーブル/チャートを表示するときに並べ替えます。

新しいデータが追加されるよりも頻繁にデータが取得される可能性が高いため、オプション 1 は共有ストアの冗長な並べ替えを減らします。これが最善の方法ですよね?

4

2 に答える 2

2

(1) の修正版を使用できます。新しいオブジェクトが挿入されるたびに配列全体をソートする代わりに、https ://stackoverflow.com/a/8180369/1187415 で説明されている方法を使用して、新しいオブジェクトを配列の正しい場所に挿入します。

次に、挿入ごとに、新しいオブジェクトの正しいインデックスを見つけるためのバイナリ検索のみがあり、配列は常に正しい順序になります。

新しいデータが追加されるよりも、データが頻繁に取得されるとのことでしたので、これはより効率的であると思われます。

于 2013-03-21T13:35:44.140 に答える
1

あなたの特別なケースを忘れてしまうと、この質問に答えるのは簡単ではありません。2 つの基本的な解決策があります。

  1. 配列をソートせずに保持し、要素にアクセスしようとして配列がソートされていない場合は、ソートします。これを「遅延ソート」と呼びましょう。

  2. 要素を挿入するときに配列をソートしたままにします。これは、最後に新しい要素を追加してから配列全体をソートすることではないことに注意してください。これは、要素があるべき場所を見つけて (二分探索)、そこに配置することです。それを「ソートされた挿入」と呼びましょう。

どちらの手法も正しくて便利であり、どちらが優れているかはユースケースによって異なります。

例:

  1. 数百の要素を配列に挿入してから要素にアクセスし、さらに数百の要素を挿入してからアクセスします。要約すると、大きなチャンクで値を挿入します。この場合、遅延ソートの方が適しています。

  2. 多くの場合、個々の要素を挿入し、要素に頻繁にアクセスします。次に、ソートされた挿入のパフォーマンスが向上します。

  3. 中間の何か (1 の挿入と数十の要素の挿入の間)。おそらく、どのメソッドが使用されるかは気にしないでしょう。

NSArray(特殊な構造を使用して、サブツリー内の要素数を維持しながら、バランスの取れたツリーに基づく構造など、ベースではなく配列をソートしたままにすることもできることに注意してください)。

于 2013-03-21T13:49:26.327 に答える