📅  最后修改于: 2023-12-03 15:07:10.916000             🧑  作者: Mango
在編程中,我们經常會遇到需要從一個列表中獲取所有的唯一項的情況。在C#中,有幾種方式可以實現這一點。本文將介紹這些方法,並幫您選擇最好的選擇。
首先,我們可以使用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()方法,該方法根據指定的鍵對序列中的元素進行分組。以下是一個示例:
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
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
這三種方法都可以用於從列表中提取唯一項。使用Linq庫中的Distinct()方法是最簡單的,但對於大型列表來說,性能可能不是最優的。使用Linq庫中的GroupBy()方法可能比使用Distinict()的方法更加快速,但是需要最後的處理使得集合變回List