簡體   English   中英

C#-元組與字典和列表有什么區別

[英]C# - What is the difference between Tuple and Dictionary and List

這個問題已經在這里回答


我試圖在我的應用程序中使用Tuple。 所以我想區分元組,字典和列表。

 Dictionary<int, string> dic = new Dictionary<int, string>();
 Tuple<int, string> tuple = new Tuple<int, string>();
 List<int> list = new List<int>();

這三個之間有什么區別?

首先,AFAIK,沒有列表帶有兩個類型參數-因此您的列表可以是List<int>List<string> (或SortedList<int,string> ,但這是一個不同的類)。

Tuple<T1, T2>包含兩個值-在這種情況下為一個int和一個字符串。
您可以使用元組將項目(可能是不同類型)綁定在一起。
這在許多情況下可能很有用,例如,您想從一個方法中返回一個以上的值。
我個人討厭Item1Item2屬性名稱,因此我可能在代碼中使用圍繞Tuples的包裝類。

Dictionary<TKey, TValue>KeyValuePair<TKey, TValue>的集合。
詞典將鍵映射到值,這樣您就可以擁有一個人詞典,例如,每個人都有他們的SSN作為鍵。

List<T>是集合T
您可以使用索引, Find方法或簡單地使用linq(因為它實現IEnumerable<T> )來獲取單個項。

列表可以按一定順序存儲對象序列,以便您可以索引到列表中,或遍歷列表。 列表是可變類型,表示列表創建后可以修改。

元組與列表類似,但它是不可變的。 列表和元組之間在語義上也有所不同。 引用Nikow的答案:

元組具有結構,列表具有順序。

字典是鍵值存儲。 它不是有序的,並且要求密鑰是可哈希的。 通過鍵快速查找。

因此,對於DictionaryList的區別,您已經看到了鏈接到問題 那么什么是Tuple 通過MSDN:

元組是具有特定數量和值序列的數據結構。 Tuple<T1, T2>類表示2元組或對,它是具有兩個成分的元組。 2元組類似於KeyValuePair<TKey, TValue>結構。

雖然其他兩個數據結構表示不同的項目集合 (泛型為您聲明的任何類型),但Tuple<T1,....>是包含預定義屬性數量的單個項目 -類似於定義具有很少屬性的類。

由於前兩個是項的集合,而元組是單個項,因此在處理它們方面,它們扮演着截然不同的角色。

閱讀更多

此外,您還可以查看元組旨在解決什么要求?

當您鏈接的答案討論List<T>Dictionary<int, T>之間的區別時, Tuple<int, string>

從MSDN

表示2元組或對。

元組是一對值,與其他類型相反,它們代表集合的種類。 想想一個方法,該方法返回最后一個錯誤的錯誤代碼和字符串(我不會這樣寫代碼,而是想出辦法)

Tuple<int, string> GetLastError()
{
    ...
}

現在您可以像

var lastError = GetLastError();
Console.WriteLine($"Errorcode: {lastError.Item1}, Message: {lastError.Item2}");

這樣,如果要返回復合值,則不必創建類。

請注意 :從C#7開始,有一種更新,更簡潔的語法用於返回元組。

暫無
暫無

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

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