2014-02-28 48 views
0

是否有可能從arraylist在c#中取得唯一值?實際上,我有一個包含值= 100,101,102,101,100,102,103的數組列表,但是我想從這個數值中獲得唯一值,如100,101,102,103。那麼,爲了從arralist獲取不同/獨特的值,c#語法是什麼?如何從arraylist中獲取不同/獨特的值?

我試圖

Arraylist Others=new Arraylist(); 
others=TakeanotherValues(); 
others.Distinct().Toarray(); 

但錯誤是「System.Collection.ArrayList不copntain認定中的獨立的」

+0

你可以發佈你的試用碼嗎? – Rami

+0

Arraylist Others = new Arraylist();他人= TakeanotherValues(); others.Distinct()指定者(); – user1659510

+2

不要再使用'ArrayList'。當C#沒有_Generics_時,它屬於過去的日子。改爲使用'List '。 –

回答

1

一個可行的辦法是循環的ArrayList的項目,並在插入每個項目新的集合。 這樣Set數據結構可以確保項目的唯一性。

using System.IO; 
using System; 
using System.Collections; 
using System.Collections.Generic; 

class Program 
{ 
    static void Main() 
    { 
     ArrayList numbers = new ArrayList() {100, 100, 200, 201, 202}; 
     HashSet<int> uniqueNumbers = new HashSet<int>(); 
     foreach(int number in numbers) { 
      uniqueNumbers.Add(number); 
     } 
     foreach(int number in uniqueNumbers) { 
      Console.WriteLine(number); 
     } 

    } 
} 
+0

這可能是最好的非LINQ解決方案,因爲它是'Distinct()'在內部執行的操作。 (這裏是Distinct實現的[source](http://referencesource-beta.microsoft.com/#System.Core/System/Linq/Enumerable.cs#4ab583c7d8e84d6d)) –

+0

謝謝@SolalPirelli。由於我很久以前就開始使用開源代碼,因此之前沒有使用過Linq :) – Rami

4

您可以使用LINQ:

var distinctArraylist = yourArrayList.ToArray().Distinct(); 
1

由於ArrayList工具IEnumerable但不IEnumerable<T>你需要轉換,然後才能申請定期LINQ操作:

var distinctArrayList = new ArrayList((ICollection)myArrayList.Cast<int>().Distinct().ToArray()); 
6

除非你絕對必須(例如,因爲你使用.NET 1),請不要使用ArrayList,它是一箇舊的非泛型類。相反,在System.Collections.Generic命名空間中使用List<T>,例如List<int>List<object>(後者在功能上等同於ArrayList,因爲您可以添加任何內容)。
一般來說,除非您確定自己在做什麼,否則請勿在System.Collections內直接使用任何東西;改爲使用System.Collections.Generic中的集合。

您可以對數據使用LINQ方法Distinct(),但如果你想使用ArrayList您首先需要使用Cast<object>()它轉換爲一個IEnumerable<T>,就像這樣:

using System.Linq; 

// ... 

var distinctItems = myList.Cast<object>().Distinct(); 

這相當於手動創建一個集合(例如HashSet<object>),將其中的每個項目添加到它中,並且他們從該集合中創建一個列表,因爲根據定義集合不會保留重複的項目(如果插入一個項目,他們不會抱怨,他們只是忽略它)。

-1

試試這個:

(from obj in _arrayList obj).Distinct(); 
+0

這不會編譯,你錯過了一個'select'。而且,使用LINQ語法有點矯枉過正,'Cast '就足夠了。 –

0
ArrayList list = new ArrayList(); 
list.Add(1); 
list.Add(2); 
list.Add(3); 
list.Add(1); 

IEnumerable<int> values = list.Cast<int>().Distinct(); 

打印出uniqu值。