わかりました...ここにソフトボールの質問があります...
特定の位置でオブジェクトにキー/値のペアを挿入できるようにする必要があります。私は現在、Hashtableを使用していますが、もちろん、この機能は使用できません。最善のアプローチは何でしょうか?
更新:また、キーで検索する機能も必要です。
たとえば...過度に簡略化され、擬似コード化されていますが、ポイントを伝える必要があります
// existing Hashtable
myHashtable.Add("somekey1", "somevalue1");
myHashtable.Add("somekey2", "somevalue2");
myHashtable.Add("somekey3", "somevalue3");
// Some other object that will allow me to insert a new key/value pair.
// Assume that this object has been populated with the above key/value pairs.
oSomeObject.Insert("newfirstkey","newfirstvalue");
前もって感謝します。
List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("Key1", "Value1"),
new KeyValuePair<string, string>("Key2", "Value2"),
new KeyValuePair<string, string>("Key3", "Value3"),
};
kvpList.Insert(0, new KeyValuePair<string, string>("New Key 1", "New Value 1"));
このコードの使用:
foreach (KeyValuePair<string, string> kvp in kvpList)
{
Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value);
}
予想される出力は次のとおりです。
Key: New Key 1 Value: New Value 1
Key: Key 1 Value: Value 1
Key: Key 2 Value: Value 2
Key: Key 3 Value: Value 3
同じことは、KeyValuePairまたは使用したい他のタイプでも機能します。
編集-
キーで検索するには、次を実行できます。
var result = stringList.Where(s => s == "Lookup");
以下を実行することで、KeyValuePairでこれを行うことができます。
var result = kvpList.Where (kvp => kvp.Value == "Lookup");
最終編集-
文字列ではなくKeyValuePairに固有の回答を作成しました。
多分 OrderedDictonary が助けになるでしょう。
キーでオブジェクトを検索する必要がありますか?そうでない場合、List<Tuple<string, string>>
または.NET 4を使用していない場合はList<KeyValuePair<string, string>>
の使用を検討してください。
OrderedDictionary を使用できますが、なぜそうするのか疑問に思うでしょう。
リンクリストを使用します。このような状況に合わせて設計されました。
辞書O(1)ルックアップがまだ必要な場合は、辞書とリンクリストの両方を使用します。
ハッシュテーブルは本質的にソートされていません。最善の策は、SortedListやArrayListなどの別の構造を使用することです
Dictionary<TKey, TValue>
を使用します(各キーが一意である限り)。
EDIT:申し訳ありませんが、特定の位置に追加したいと思いました。私の悪い。 SortedDictionary を使用できますが、これでも挿入できません。