首页 新闻 会员 周边

删除A集合中在B集合里存在的数据

-3
悬赏园豆:5 [已解决问题] 解决于 2017-03-02 17:50

现在有两个集合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);
                    }
                }
            }

但是总是抛出异常,说是下标越界,有哪位大神有更好的方法没?

gyangjing的主页 gyangjing | 初学一级 | 园豆:4
提问于:2017-02-23 16:01
< >
分享
最佳答案
0

差集

var newA = listA.Except(listB);

 

收获园豆:5
Qlin | 老鸟四级 |园豆:2403 | 2017-02-23 17:51

还是这个最简单

路人第十一 | 园豆:323 (菜鸟二级) | 2017-02-24 09:00
其他回答(7)
0

list.contains("abc"),用这个方法,遍历一次就可以

[3] | 园豆:1174 (小虾三级) | 2017-02-23 16:10

现在是知道集合中有相同的元素,在实际当中不知道元素等于多少,只能通过比对,如果两个元素里面有相等的再去删除

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2017-02-23 16:12
0

listA.Distinct(listB);

路人第十一 | 园豆:323 (菜鸟二级) | 2017-02-23 16:11

C#中List集合里面有Distinct这个方法?即使有这样的方法,当集合中有多个元素,你怎么确定是比对两个集合中哪两个元素相等呢?

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2017-02-23 16:17

@gyangjing: listB.ForEach(b=> listA.Remove(b));

支持(0) 反对(0) 路人第十一 | 园豆:323 (菜鸟二级) | 2017-02-23 16:50

@gyangjing: C#几乎提供了大部分常用的操作集合的方法,如果只是简单的遍历,没有必要永循环。

支持(0) 反对(0) 路人第十一 | 园豆:323 (菜鸟二级) | 2017-02-23 17:06

@gyangjing: 我复制了你的代码,运行调试后没有错误

支持(0) 反对(0) 路人第十一 | 园豆:323 (菜鸟二级) | 2017-02-23 17:11
0

找出交集,遍历交集 再去删除对应的元素

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             }

 

~扎克伯格 | 园豆:1923 (小虾三级) | 2017-02-23 16:18
0

list在for循环遍历的时候不能romove,会出现角标越界异常

让我发会呆 | 园豆:2929 (老鸟四级) | 2017-02-23 16:24

用list 的iterator()方法去remove

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2017-02-23 16:26
0

listA.where(a=>!list.contains(a))

吴瑞祥 | 园豆:29449 (高人七级) | 2017-02-23 16:25
0
            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);
                }
            }

 

龙行天涯 | 园豆:1794 (小虾三级) | 2017-02-23 16:52
0

为了保险起见,不会造成下标越界,用取差集的方法最好:

var expReserve = reserveList.ReserveProducts.Where(a => reserveList.PurchasedProducts.All(t => !a.Product.BARCODE.Contains(t.Product.BARCODE))).ToList();

gyangjing | 园豆:4 (初学一级) | 2017-03-02 17:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册