📜  列表中的唯一项 c# (1)

📅  最后修改于: 2023-12-03 15:07:10.916000             🧑  作者: Mango

列表中的唯一项 C#

在編程中,我们經常會遇到需要從一個列表中獲取所有的唯一項的情況。在C#中,有幾種方式可以實現這一點。本文將介紹這些方法,並幫您選擇最好的選擇。

使用Linq的Distinct()方法

首先,我們可以使用Linq庫中的Distinct()方法,該方法會返回一個新的IEnumerable,其中包含與原始序列中所有唯一項。以下是一個示例:

using System.Linq;

var list = new List<string> {"apple", "banana", "apple", "grape", "banana"};
var unique = list.Distinct().ToList(); // unique contains ["apple" "banana" "grape"]

我們創建了一個包含幾個字符串的列表,並調用了Distinct()方法,這樣我們就有了另一個列表,其中包含此列表中唯一的一些字符串。

使用Linq的GroupBy()方法

第二種方法是使用Linq庫中的GroupBy()方法,該方法根據指定的鍵對序列中的元素進行分組。以下是一個示例:

using System.Linq;

var list = new List<string> {"apple", "banana", "apple", "grape", "banana"};
var dict = list.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); // dict contains {"apple" 2 "banana" 2 "grape" 1}
var unique = dict.Keys.ToList(); // unique contains ["apple" "banana" "grape"]

我們創建了一個包含幾個字符串的列表,並調用了GroupBy()方法,我們將每個變量映射到其出現次數,接下來我們創建了一個包含此列表中唯一項的列表。

使用HashSet

第三種方法是使用HashSet類,該類是一個用於維護一組唯一項的容器,它模仿了數學中的集合。以下是一個示例:

using System.Collections.Generic;

var list = new List<string> {"apple", "banana", "apple", "grape", "banana"};
var set = new HashSet<string>(list); // set contains {"apple" "banana" "grape"}
var unique = set.ToList(); // unique contains ["apple" "banana" "grape"]

我們創建了一個包含幾個字符串的列表,並將其傳遞給HashSet的構造函數。因為HashSet中的每個項目都是唯一的,所以我們創建的set只包含此列表中唯一的字符串。最後,我們創建了一個包含此列表中唯一項的列表。

結論

這三種方法都可以用於從列表中提取唯一項。使用Linq庫中的Distinct()方法是最簡單的,但對於大型列表來說,性能可能不是最優的。使用Linq庫中的GroupBy()方法可能比使用Distinict()的方法更加快速,但是需要最後的處理使得集合變回List。使用HashSet類是一種可以讓我們直接得到唯一集合的方式,如果你正在處理一個大型的、可能需要在迭代時不斷添加、刪除和查找的數量時,則HashSet類將是最好的選擇。