将字典转换为C#中的列表集合


93

尝试将字典转换为列表时遇到问题。

例如,如果我有一个字典,模板字符串作为键,字符串作为值。然后,我希望将字典键转换为字符串形式的列表集合。

Dictionary<string, string> dicNumber = new Dictionary<string, string>();
List<string> listNumber = new List<string>();

dicNumber.Add("1", "First");
dicNumber.Add("2", "Second");
dicNumber.Add("3", "Third");

// So the code may something look like this
//listNumber = dicNumber.Select(??????);

5
您是否要从字典中获取键列表?如果是这样,则在Dictionary上有一个Keys属性可以为您提供。
Brian Rasmussen 2010年

Answers:


175

要将密钥转换为自己的列表:

listNumber = dicNumber.Select(kvp => kvp.Key).ToList();

或者,您可以缩短它,甚至可以不用使用select:

listNumber = dicNumber.Keys.ToList();

@Brian-我正在编辑中到达那里。我想先展示select方法,因为那是OP要求的,然后再展示替代方法。:-)
贾斯汀·涅斯纳

所以我想了,所以删除了我的评论。
Brian Rasmussen 2010年

1
这真的很有帮助。我需要在返回键之前将.Where(...)应用于dict,但是该方法不会返回字典,因此无法访问Keys属性。使用这个选择后,在那里工作非常
马丁科尔

22

或者:

var keys = new List<string>(dicNumber.Keys);

4
使用.NET Compact Framework 2.0(因此没有Linq),这对我来说是最佳选择。
Michael Murphy

如果您不能使用LINQ,则此选项似乎是最好的。
user2000950

17

如果要使用Linq,则可以使用以下代码段:

var listNumber = dicNumber.Keys.ToList();

9

如果要转换密钥:

List<string> listNumber = dicNumber.Keys.ToList();

否则,如果要转换值:

List<string> listNumber = dicNumber.Values.ToList();

这将起作用,但可能与您期望的顺序不符,即使该dict之前也已通过键对dict进行排序。值不是...
BooNonMooN


3

如果要将字典键集合传递给一个方法参数。

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.