现在有两个集合A和B,如:A集合中有数据:List<string> listA=new List<string>();
listA.Add("a");listA.Add("b");listA.Add("c");listA.Add("d");
B集合:List<string> listB=new List<string>();
listB.Add("a");listB.Add("c");
现在需要把A集合中在B集合里存在的数据给删除掉,即删掉A中a和c元素,我是这样做的:
for (int i=listA.Count-1;i>=0; i--)
{
for (int j = listB.count-1; j>=0; j--)
{
if (listA[i]== listB[j])
{
listA.RemoveAt(i);
}
}
}
但是总是抛出异常,说是下标越界,有哪位大神有更好的方法没?
差集
var newA = listA.Except(listB);
还是这个最简单
list.contains("abc"),用这个方法,遍历一次就可以
现在是知道集合中有相同的元素,在实际当中不知道元素等于多少,只能通过比对,如果两个元素里面有相等的再去删除
listA.Distinct(listB);
C#中List集合里面有Distinct这个方法?即使有这样的方法,当集合中有多个元素,你怎么确定是比对两个集合中哪两个元素相等呢?
@gyangjing: listB.ForEach(b=> listA.Remove(b));
@gyangjing: C#几乎提供了大部分常用的操作集合的方法,如果只是简单的遍历,没有必要永循环。
@gyangjing: 我复制了你的代码,运行调试后没有错误
找出交集,遍历交集 再去删除对应的元素
1 string[] array=listA.Intersect(listB).ToArray(); 2 for (int i = 0; i <array.Length; i++) 3 { 4 if (listA.Contains(array[i])) 5 { 6 listA.Remove(array[i]); 7 } 8 }
list在for循环遍历的时候不能romove,会出现角标越界异常
用list 的iterator()方法去remove
listA.where(a=>!list.contains(a))
List<string> listA = new List<string>() { "a","b","c","d" }; List<string> listB = new List<string>() { "a","c" }; foreach (var item in listB) { if (listA.Contains(item)) { listA.Remove(item); } }
为了保险起见,不会造成下标越界,用取差集的方法最好:
var expReserve = reserveList.ReserveProducts.Where(a => reserveList.PurchasedProducts.All(t => !a.Product.BARCODE.Contains(t.Product.BARCODE))).ToList();