簡體   English   中英

字典到列表(C#)

[英]Dictionary to List (C#)

這不是一個問題,但我很好奇是否有更好的方法。 基本上,我有一個字典,其中鍵是我創建的結構。 我需要做的是獲取密鑰中某個屬性的列表。 即在結構中我有一個名為'ID'的字段,我希望得到一個列表。 我現在正在做的是:

List<long> keys = new List<long>();
foreach(var key in dict.Keys)
{
     keys.Add(key.ID);
}

這是有效的,但我只是想知道我是否錯過了一個更簡單的方法 - 起初我想也許ToList方法可以給一個參數,所以我可以在列表中指定我想要的結構部分,但它沒有'我似乎可以。

你們怎么改進這個?

您可以使用LINQ:

List<long> keys = dict.Keys.Select(k => k.ID).ToList();

在這里,您將ID傳遞給Select()而不是ToList() ,並且只調用ToList()將結果集合轉換為列表。

使用Select (From Linq)進行投影,使用ToArray創建具體列表。 (或者如果您需要稍后修改結果集合,則為ToList

var keys = dict.Keys.Select(k => k.ID).ToArray();

使用Linq:

var keys = dict.Keys.Select(p => p.ID).ToList();

使用List一個構造函數

var keys = new List<long>(dict.Keys.Select(p => p.ID));

(構造函數接受IEnumerable<T> ,而Select dict.Keys顯然是這樣)

並使用AddRange

var keys = new List<long>();
keys.AddRange(dict.Keys.Select(p => p.ID));

一般來說,我們使用.Select “of”Linq來解決問題。 顯然我們可以寫:

from p in dict.Keys select p.ID 

代替

dict.Keys.Select(p => p.ID)

我會注意到AddRange唯一有趣的區別:其他“方法”創建一個新的List並填充它。 AddRange添加到可能已有元素的預先存在的List中。

使用linq將id作為列表返回:

List<long> result = dic.Select(x => x.Key.ID).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM