我有一個C#的sting列表,它可以是x行長。下面會顯示一個小例子。我想知道我將如何現在如何我可以得到一個小清晰的名單,以便A
不會多次出現。此列表即將發佈代碼。所以它是隨機的。列出不同的列表清單
list = {a,b,a,f,a,null,a,e,a,e}
我有一個C#的sting列表,它可以是x行長。下面會顯示一個小例子。我想知道我將如何現在如何我可以得到一個小清晰的名單,以便A
不會多次出現。此列表即將發佈代碼。所以它是隨機的。列出不同的列表清單
list = {a,b,a,f,a,null,a,e,a,e}
嘗試LINQ .... 更具體... 鑑於您的實際列表的String []你能做到這一點是...
string[] list = {"a","b","a","f","a",null,"a","e","a","e"};
var distinctList = list.Distinct();
foreach (var str in distinctList)//Distinct list of values
{
Console.Write(str);
}
_「list實際上是string []」_它不需要是一個數組,「Distinct」可以處理所有類型的' IEnumerable
您也可以使用HashSet<T>
:
var set = new HashSet<string>(list);
如果要替換舊列表具有獨特的名單:
list = set.ToList();
HashSet<T>
有很多useful and efficient methods哪些經常被忽略。
該
HashSet<T>
類提供了高性能的集合操作。一套 是一個集合,其中不包含重複元素,而其 元素沒有特定的順序。
更新「使A
不會出現多時間」
由於列表中包含小寫a
我以爲你不知道,.NET比較區分大小寫的默認。你可以用這種方法比較不區分大小寫:
var set = new HashSet<string>(list, StringComparer.OrdinalIgnoreCase);
只是用不同的()關鍵字是這樣的:
List<string> foo = new List<string> {"a","b","a","f", "a", null,"a" ,"e","a","e"};
foreach (var element in foo.Distinct())
{
element.Dump();
}
輸出:
a
b
f
null
e
這是寫在Linqpad。轉儲方法將不會提供給您
其他字符如「e」怎麼辦?你希望它也是獨一無二的嗎? –
另外,'A'和'A'是否一樣?您在文本中提到了大寫字母A,但您的列表中包含小寫字母a。在[我的答案](http://stackoverflow.com/a/18355752/284240)中提到了一種忽略此案例的方法。順便說一句,'Distinct'的工作方式是:Distinct(StringComparer.OrdinalIgnoreCase);' –