是否有可能从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不会为了区分'
而保留定义答案 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();