如何从arraylist中获取不同/唯一的值?

时间:2014-02-28 07:21:46

标签: c# arraylist

是否有可能从c#中的arraylist中获取唯一值?实际上我有一个包含值= 100,101,102,101,100,102,103的arraylist,但我想要这样的唯一值,如100,101,102,103。那么什么是c#语法来从arralist中获取不同/唯一值?

我试过

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

但是错误是' System.Collection.ArrayList不会为了区分'

而保留定义

6 个答案:

答案 0 :(得分:7)

除非您必须(例如因为您使用的是.NET 1),否则请不要使用ArrayList,它是一个旧的非泛型类。相反,请在List<T>命名空间中使用System.Collections.Generic,例如List<int>List<object>(后者在功能上等同于ArrayList,因为您可以向其添加任何内容)。
一般情况下,除非你确定自己在做什么,否则不要直接在System.Collections内使用任何东西;请改用System.Collections.Generic中的集合。

您可以在数据上使用LINQ方法Distinct(),但如果您想使用ArrayList,首先需要使用IEnumerable<T>将其强制转换为Cast<object>(),如此:

using System.Linq;

// ...

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

这相当于手动创建一个集合(例如HashSet<object>),将列表中的每个项目添加到该集合中,并且他们从该集合中创建列表,因为根据定义集合不会保留重复项目(它们)如果你插入一个,不要抱怨,他们只是忽略它。)

答案 1 :(得分:4)

您可以使用Linq:

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

答案 2 :(得分:1)

一种可能的解决方案是循环播放arraylist项目,并将每个项目插入新的Set中。 这样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);
        }

    }
}

答案 3 :(得分:1)

由于ArrayList实现了IEnumerable而不是IEnumerable<T>,因此您需要在应用常规LINQ操作之前进行强制转换:

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

答案 4 :(得分:1)

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

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

打印出独特的价值观。

答案 5 :(得分:-1)

试试这个:

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