次のような固定の順序付けされたインデックス値を持つ 100,000 個の文字列があります。
Index String Value
0 XXXXXXXXXXXXXXXXXXXXX
1 XXXXXXXXXX
2 (empty string)
3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4 XXXXX
5 XXXXXXXXX
6 XXXXXXXXXXXXXXX
7 (empty string)
8 XX
9 XXXXXXXXXX
10 XXXXXXXXXXXXXXXXXXXXXXXXXX
... ...
99999 XXXXXXXXXXXXXXXXXXX
私のデータ構造は正確に 100,000 個の順序付きエントリを保持する必要があり、文字列値の一部 (または多く) は、少なくとも最初は空である可能性があります。各インデックス値は一意 (連続した整数) であり、空の文字列を除いて、各文字列値も一意です。UI に表示するために、通常はデータ構造にデータを入力し、リスト ボックスをそれにバインドします (DisplayMember と ValueMember を指定して)。ただし、この場合、空ではない文字列のみを表示したいと考えています。したがって、おそらく、次のような方法で、データ構造を繰り返し処理し、該当する項目をリスト ボックスに追加する必要があります。
foreach (item in MyDataStructure)
{
if (item.StringValue != string.Empty)
{
listBox1.Items.Add(item);
}
}
各文字列とそのインデックス値の間の関係を常に維持できることは、私にとって非常に重要です。ご想像のとおり、私のユーザーは文字列を追加/編集/削除する必要があります。理論的には、3 つの操作はすべて、特定のインデックスで文字列値を更新するという同じことになります。新しい文字列を追加するには、まずデータ構造を繰り返し処理し、空の文字列がどこかにあることを確認して、それを新しい文字列に置き換える必要があります。空の文字列が存在しない場合、ユーザーは最初に既存の文字列を「編集」するか、別の文字列を「削除」する必要があります。これは、固定数の合計文字列 (100k) を扱っているためです。プログラムの観点からは、文字列を「削除」することも、データ構造の適切なインデックスで空/null 文字列に置き換えるだけの問題です。
私が予見できる限り、次のことを簡単に実行できるデータ構造が必要になります。
- 空でないすべての文字列のインデックスと文字列の値をリスト ボックスに追加し、インデックスを ValueMember として使用し、文字列を DisplayMember として使用します。
- 特定のインデックスのデータ構造をすばやく検索し、その文字列値を取得します
- 文字列のデータ構造をすばやく検索して、それが既に存在するかどうかを確認します
これらのことを念頭に置いて、タスクに適した特定のデータ構造を推奨できる人はいますか? 最初は、各インデックス/文字列を保持するためのキー/値のペアを持つ辞書を考えていました。次に、合計サイズが固定され、配列インデックス自体が各文字列値のインデックス値としても機能する可能性があるため、誰かが配列を使用することを提案しました。