我有n个数组,先求任意n-1个数组的交集
然后再求得到的新的n个数组的并集
例如:有5个数组
先求
a1 a2 a3 a4的交集b1
a1 a2 a3 a5的交集b2
a1 a2 a4 a5的交集b3
a1 a3 a4 a5的交集b4
a2 a3 a4 a5的交集b5
然后求得到的新的数组b1,b2,b3,b4,b5的并集
求方法

解决方案 »

  1.   

    a1.Intersect(a2)  ==> a1和a2的交集a1.Union(a2)   ==>a1和a2的并集
      

  2.   

    List<int[]> list = new List<int[]>();
                for (int i = 0; i < 5; i++)
                    list.Add(Enumerable.Range(1, 20).OrderBy(T => Guid.NewGuid()).Take(10).ToArray());
                list.ForEach(t => Console.WriteLine(string.Join(",", t.Select(T => T.ToString()).ToArray())));
                int[] source = new int[0];
                for (int i = 0; i < 5; i++)
                {
                    List<int[]> lst = new List<int[]>();
                    list.Select((t, index) => { if (index != i)lst.Add(t); return 0; }).ToArray();
                    source = source.Union(lst.Aggregate((a, b) => a.Intersect(b).ToArray())).ToArray();
                }
                Console.WriteLine(string.Join(",", source.Select(T => T.ToString()).ToArray()));
      

  3.   

        List<int[]> al = new List<int[]>();
                al.Add(new int[] { 1 });
                al.Add(new int[] { 1, 2, 3, 4 });
                al.Add(new int[] { 1,3 });
                al.Add(new int[] { 3, 4 });
                al.Add(new int[] { 1, 2 });            List<int[]> al2 = new List<int[]>();
                for (int i = 0; i < al.Count; i++)
                {
                    int[] s = null;
                    for (int j = 0; j < al.Count; j++)
                    {
                        if (i != j)
                        {
                            if (j == 0)
                            {
                                s = al[j];
                            }
                            else
                            {
                                if (i == 0) 
                                {
                                    if (j == 1)
                                    {
                                        s = al[j];
                                    }
                                    else 
                                    {
                                        s = (s.Intersect(al[j])).ToArray();
                                    }
                                }
                                else
                                {
                                    s = (s.Intersect(al[j])).ToArray();
                                }
                            }
                        }
                    }
                    al2.Add(s);
                }            int[] t = null;
                for (int k = 0; k < al2.Count; k++)
                {
                    if (k == 0)
                    {
                        t = al2[0];
                    }
                    else
                    {
                        t = (t.Intersect(al2[k])).ToArray();
                    }
                }            //最后得到的t就是你所要的数据
      

  4.   

    方法我自己想到了
    有n个数组,先求任意n-1个数组的交集
    然后再求得到的新的n个数组的并集
    说明里边的元素至少要出现n-1次
    所以我的做法就是先把所有的n个数组求并集
    然后提取出现次数大于等于n-1次的元素
    然后去重还望大家指点