7

この質問はコアデータのコンテキストにありますが、私が間違っていなければ、より一般的なSQLの場合にも同様に当てはまります。

Core Dataを使用して順序付きテーブルを維持したいのですが、ユーザーは次のことができます。

  • 行を並べ替える
  • どこにでも新しい行を挿入します
  • 既存の行を削除します

それを行うのに最適なデータモデルは何ですか?私は2つの方法を見ることができます:

position1)配列としてモデル化する:エンティティにintプロパティを追加します

2)リンクリストとしてモデル化する:2つの1対1の関係を追加nextprevious、エンティティからそれ自体に追加します

1)並べ替えは簡単ですが、position後に続くすべてのオブジェクトを更新する必要があるため、挿入または削除するのは面倒です。

2)挿入または削除は簡単ですが、並べ替えは非常に困難です。ORDER BY実際、その場合のソート記述子(SQL句)の表現方法がわからないと思います。

今、私は1)のバリエーションを想像することができます:

3)intorderingプロパティをエンティティに追加しますが、1つずつカウントするのではなく、100 x 100をカウントします(たとえば)。次に、挿入は、前の既存のオブジェクトと次の既存のオブジェクトの順序の間の任意の数を見つけるのと同じくらい簡単です。高価な番号の付け直しは、100個の穴が埋められたときにのみ発生する必要があります。そのプロパティをintではなくfloatにすると、さらに良くなります。ほとんどの場合、2つのfloatの中間に新しいfloatを見つけることができます。

私は解決策3)で正しい方向に進んでいますか、それとももっと賢いものがありますか?

4

2 に答える 2

4

順序が任意である場合、つまりモデル化されるデータに固有ではない場合、順序を維持するために属性または関係を追加する以外に選択肢はありません。

保守が最も簡単なので、リンクリストをお勧めします。とにかく任意の順序で並べ替えられない可能性が高いため、リンクリストの並べ替えが難しいとはどういう意味かわかりません。代わりに、最上位のインスタンスをフェッチして、下に移動します。

分割可能なfloat属性で並べ替えることをお勧めします。上位の既存のインデックスから下位の既存のインデックスを減算し、結果を2で除算してから、その結果を下位のインデックスに追加するだけで、ほぼ無限の数の中間インデックスを作成できます。

テーブルなどの順序が必要な場合は、分割可能なインデックスをリンクリストと組み合わせることができます。リンクリストを使用すると、既存のインデックスを簡単に見つけることができ、分割可能なインデックスを使用すると、必要に応じて簡単に並べ替えることができます。

Core Dataは、通常は不要であるため、この種の順序付けに抵抗します。モデルが記述する実世界のオブジェクト、イベント、または条件をシミュレートする必要がない限り、データモデルに何かを追加する必要はありません。通常、順序付け/並べ替えはモデルに固有のものではなく、UI/ビューで必要になるだけです。その場合、モデルとビューの間のコントローラーに並べ替えロジックが必要です。

注文が不要な場合は、モデルに注文を追加する前に慎重に検討してください。

于 2010-09-05T11:53:42.000 に答える
0

iOS 5以降、NSOrderedSetとその可変サブクラスを使用できます(使用する必要があります)。→ OSXv10.7およびiOS5.0のコアデータリリースノート

CoreDataで順序付きリストを保持するにはどうすればよいですか。で承認された回答を参照してください。

于 2012-09-21T09:36:05.273 に答える