使用LINQ从ArrayList中删除一组项

本文关键字:一组 删除 LINQ ArrayList 使用 | 更新日期: 2023-09-27 17:50:35

我有一个Arraylist,它包含所有属性的ID(list1(。现在我有另一组属性的Id(list2(,它需要从第一个ArrayList(list1(中删除

作为LINQ开发人员,我处于初级阶段,所以请建议正确的代码片段

Arraylist attributeIDs; // which contains Ids
int[] ids = { 1, 2, 3, 4 };
var id = ids.Select(s => s);
var sam = attributeIDs.Cast<IEnumerable>().Where(s => id.Contains(Convert.ToInt32(s)));
Arraylist filterAttributDs = Cast<Arraylist>sam;

在上面的代码之后,我需要将输出Arraylist转移到不同的方法,所以我只需要在Arraylist中输出提前感谢!

使用LINQ从ArrayList中删除一组项

尝试方法

var sam = attributeIDs.Cast<IEnumerable>().Where(s => id.Contains(Convert.ToInt32(s)));
ArrayList myArrayList = new ArrayList(sam );

编辑

int[] ids = { 1, 2, 3, 4 };
//var id = ids.Select(s => s);
List<int> id = ids.OfType<int>().ToList();
var list = attributeIDs.Cast<int>().ToList();
//or try 
//List<int> list = new List<int>(arrayList.ToArray(typeof(int)));
var sam = list.Where(s => id.Contains(s));
//if you want to remove items than , !Contains() rather an Contains()
// var sam = list.Where(s => !id.Contains(s); 
//also try out Intersect or Except instead of this as jon suggestion in comment 
//var sam= attributeIDs.Except(id); for diffence between list
//var sam= attributeIDs.Intersect(id); for common in list

ArrayList myArrayList = new ArrayList(sam );

合并所有

检查以下内容:在中而非中的LINQ to SQL

new Arraylist((from id in attributeIDs where !ids.Contains(id) select id).ToList())

正如Jon提到的,您应该考虑只使用一个简单的数组或一个泛型集合。还要注意,上面的查询在O(n*m(中运行,其中n是原始列表中的项目数,m是您试图删除的列表中的元素数。为了获得更好的性能,您应该考虑使用HashSet,然后在此处使用set-difference操作。

对您的示例进行轻微调整:

ArrayList attributeIDs = new ArrayList(){ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] ids = { 1, 2, 3, 4 };
var sam = attributeIDs.Cast<int>().Intersect(ids);

几个注意事项:

  • Cast强制转换基础项类型,而不是集合的类型。

  • foo = setOfThings.Select(a => a) <==> setOfThings

  • Intersect表示"只选择两个集合中出现的元素">

(如其他地方所述,Intersect对于大型数据集是非最优的:考虑使用适当的结构,如HashSet(

问题的解决方案是:

ArrayList firstList=new ArrayList(new int[]{1,2,3,7,8,9}(;

ArrayList secondList=new ArrayList(new int[]{1,3}(;

var result=来自firstList中的c。ToArray((在哪里!(从secondList.ToArray((中的n中选择n(。包含(c(选择c;

foreach(结果中的变量温度(安慰WriteLine(临时(;

以上的OutPut是:2 7 8 9即secondList的项目从firstList中删除,结果也是您需要获得的ArrayList。