私はC#/。NET 4.5でアプリを作成しており、次のように定義された辞書があります。
Dictionary<int, string> d = new Dictionary<int, string>();
私の整数キーはシーケンシャルで一意であり、空の文字列を除いて、私の値も一意になります。例えば:
Key Value
0 AAAAAAAAAA
1 BBBBBB
2 (empty string)
3 CCCCCCCCCCCCCCCCCCCCCCCC
4 DDDDDDDDDDDDDDD
5 EEEEEEEEEEEEEEEEEEE
6 (empty string)
辞書に追加する新しい文字列がある場合、(空の文字列)の値を持つキーの1つにそれを割り当てる必要があります。理想的には、そのようなキーの最初のインスタンスでこれを実行したいと思います。私は現在、次のように辞書をループしています。
int keyNumber;
foreach (KeyValuePair<int, string> pair in d)
{
if (pair.Value == string.Empty)
{
keyNumber = pair.Key;
break;
}
}
d[keyNumber] = "new string goes here!";
これは機能しますが、同じことを達成するためのより良い(またはより速い)方法はありますか?これが実際に最善のアプローチである場合、それをLINQ式に短縮することは可能ですか?
編集 - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------
おそらく説明するのに重要なことは省略しました。私の辞書にロードされる値は、実際には、ASCII文字列を保持する固定長のバイト配列で構成されるバイナリファイルからロードされます。ファイルは常に5000000バイトまたは合計100000文字列@それぞれ50バイトで構成されます。ファイル構造は、ファイルを消費するデバイスのハードウェア制限によって決定されました。したがって、辞書内の各KeyValuePairのキーは、実際には、ユーザーが変更を加え終わったときに変更を書き込む必要があるファイルへのオフセットを決定するために使用されます。たとえば、4のキーを使用して、50を掛けて開始オフセットを200バイトにします。次に、変更した文字列をその場所に書き戻します。私の元の投稿でそれを省略して申し訳ありません。