2013-08-21 38 views
3

我有一個C#的sting列表,它可以是x行長。下面會顯示一個小例子。我想知道我將如何現在如何我可以得到一個小清晰的名單,以便A不會多次出現。此列表即將發佈代碼。所以它是隨機的。列出不同的列表清單

list = {a,b,a,f,a,null,a,e,a,e} 
+0

其他字符如「e」怎麼辦?你希望它也是獨一無二的嗎? –

+0

另外,'A'和'A'是否一樣?您在文本中提到了大寫字母A,但您的列表中包含小寫字母a。在[我的答案](http://stackoverflow.com/a/18355752/284240)中提到了一種忽略此案例的方法。順便說一句,'Distinct'的工作方式是:Distinct(StringComparer.OrdinalIgnoreCase);' –

回答

8

嘗試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); 
} 
+2

_「list實際上是string []」_它不需要是一個數組,「Distinct」可以處理所有類型的' IEnumerable '。除此之外,由於'Enumerable.Distinct'是使用延遲執行實現的,它實際上不是'distinctList'。它只是在'foreach'或其他實現它的方法(f.e。'ToList')上執行的查詢。所以你應該提到,因爲OP想要有一個「不同的**列表**」。否則,您將始終執行此查詢,如果這些值無法更改,則效率會很低。 –

1

您也可以使用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); 
0

只是用不同的()關鍵字是這樣的:

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。轉儲方法將不會提供給您