web-dev-qa-db-ja.com

キー/値ペアオブジェクトにアイテムを挿入する方法は?

わかりました...ここにソフトボールの質問があります...

特定の位置でオブジェクトにキー/値のペアを挿入できるようにする必要があります。私は現在、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");

前もって感謝します。

61
Clay
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に固有の回答を作成しました。

114
Ian P

多分 OrderedDictonary が助けになるでしょう。

5
Matthew Jones

キーでオブジェクトを検索する必要がありますか?そうでない場合、List<Tuple<string, string>>または.NET 4を使用していない場合はList<KeyValuePair<string, string>>の使用を検討してください。

3
Daniel Plaisted

OrderedDictionary を使用できますが、なぜそうするのか疑問に思うでしょう。

2
Mitch Wheat

リンクリストを使用します。このような状況に合わせて設計されました。
辞書O(1)ルックアップがまだ必要な場合は、辞書とリンクリストの両方を使用します。

2
Rubys

ハッシュテーブルは本質的にソートされていません。最善の策は、SortedListやArrayListなどの別の構造を使用することです

1
NibblyPig

Dictionary<TKey, TValue> を使用します(各キーが一意である限り)。

EDIT:申し訳ありませんが、特定の位置に追加したいと思いました。私の悪い。 SortedDictionary を使用できますが、これでも挿入できません。

0
Dan Diplo