如何将项插入键/值对对象?

时间:2010-04-30 14:48:27

标签: c# insert list

好的......这是一个垒球问题......

我只需要能够将键/值对插入到特定位置的对象中。我目前正在使用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");

提前致谢。

7 个答案:

答案 0 :(得分:109)

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而不是字符串。

答案 1 :(得分:5)

也许OrderedDictonary会帮助你。

答案 2 :(得分:3)

你需要按键查找对象吗?如果没有,请考虑使用List<Tuple<string, string>>List<KeyValuePair<string, string>>,如果您不使用.NET 4。

答案 3 :(得分:2)

您可以使用OrderedDictionary,但我会质疑您为什么要这样做。

答案 4 :(得分:2)

使用链接列表。它是为这种确切的情况而设计的 如果您仍需要字典O(1)查找,请同时使用字典和链接列表。

答案 5 :(得分:1)

Hashtables本身并没有排序,最好的办法是使用其他结构,例如SortedList或ArrayList

答案 6 :(得分:0)

我会使用Dictionary<TKey, TValue>(只要每个键都是唯一的)。

编辑:抱歉,您意识到要将其添加到特定位置。我的错。您可以使用SortedDictionary,但这仍然不允许您插入。