List<List<string>> list1 = new List<List<string>>();
List<List<string>> list2 = new List<List<string>>();元素格式:
比如:
List<string>> s1 = new List<string>>(){"0","1"};
List<string>> s2 = new List<string>>(){"0","1","2"};
有三个元素的,也有2个元素的规则:
比如,{"0","1","2"};与{"0","1"};其中一个集合的元素完全被包含在另一个元素中,则视为相等;且,取交集的时候,只取元素多的那个,元素少的那个则丢弃
最后得到的结果,如果有重复的,则要去掉重复,去掉重复的规则也是一样,只取元素多的求出list1和list2的交集谢谢!!!

解决方案 »

  1.   


    void Main()
    {
    List<List<string>> list1 = new List<List<string>>();
    List<List<string>> list2 = new List<List<string>>();
     
    List<string> s1 = new List<string>{"0","1"};
    List<string> s2 = new List<string>{"0","1","2"};list1.Add(s1);
    list2.Add(s2);
    var result=list2.Intersect(list1,new ListStringComparer());
     result.SelectMany(r=>r).ToList().ForEach(r=>Console.WriteLine(r));
    /*
    0
    1
    2
    */
    }public class ListStringComparer : IEqualityComparer<List<string>>

    public bool Equals(List<string> t1, List<string> t2) 

    return (t1.Except(t2).Count()==0 || t2.Except(t1).Count()==0);
    } public int GetHashCode(List<string> t) 

    return t.ToString().GetHashCode();

    }
      

  2.   

    http://blog.csdn.net/q107770540/article/details/6371087
      

  3.   

    哥们,我是求
    List<List<string>> list1 = new List<List<string>>();
    List<List<string>> list2 = new List<List<string>>();
    的交集
    它们的元素类型是List<string>
      

  4.   

    List<string> s1 = new List<string>() { "0", "1" };
                List<string> s2 = new List<string>() { "0", "1", "2" };
                var Intersect = s1.Intersect(s2);
                Console.Write ("Intersect is:{0}",string.Join (",",Intersect.ToArray ()));
                
                Console.ReadKey();
      

  5.   

    LZ是否是和我QQ聊天的那位朋友,你还在纠结这件事情吗?交集可以参考:http://www.cnblogs.com/codeio/archive/2011/10/27/2226035.html但是你的问题,好像总是围绕在包含的问题你能否按照你的规则举一个完整的例子,从两个集合list1和list2的初始化赋值,到求得的结果两个集合中的元素最好有好几个,方便我理解你的具体意图
      

  6.   

    好吧,我重新阐述一下
    List<List<string>> list1 = new List<List<string>>()
    {
      new List<string>(){"0","1"},new List<string>(){"4","6"},new List<string>(){"7","6","5"},
    }List<List<string>> list2 = new List<List<string>>()
    {
      new List<string>(){"2","1","0"},new List<string>(){"4","7","8"},new List<string>(){"3","6"},
    }
    要求,list1和list2进行那个啥(不能说交集,说啥好呢?),进行汇总吧,要求两集合中,相同的元素,可以纳入新的集合,或者满足以下条件的,也纳入新的集合1:{"2","1","0"}与{"0","1"},其中一个,完全被包含在另一个之中,这样的话,就取元素多的那个,元素少得那个,则丢弃。那么,就取"2","1","0"},丢弃{"0","1"}2:{"2","1","0"}与{"2","0","1"}之类的,当然,视为相同,任取其一,即可比如,上述例子的结果为:
    List<List<string>> list3 = new List<List<string>>()
    {
      new List<string>(){"2","1","0"}
    }这下,我阐述清楚了吧那,请动手吧...写出过程,得到结果
      

  7.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<List<string>> list1 = new List<List<string>>()
                { 
                    new List<string>(){"0","1"},new List<string>(){"4","6"},new List<string>(){"7","6","5"},new List<string>(){"3","6","5"},new List<string>(){"2","1","0"}
                };            List<List<string>> list2 = new List<List<string>>()
                {
                    new List<string>(){"2","1","0"},new List<string>(){"4","7","8"},new List<string>(){"3","6"}
                };            List<List<string>> listResult = new List<List<string>>();
                foreach (List<string> list1Item in list1)
                    foreach (List<string> list2Item in list2)
                    {
                        List<string> compareResult = CompareListString(list1Item, list2Item);
                        if (compareResult != null)
                        {
                            if (!ListItemInListString(compareResult, listResult))
                                listResult.Add(compareResult);
                        }
                    }            foreach (List<string> l in listResult)
                {
                    Console.Write("找到集合,元素为:");
                    foreach (string s in l)
                        Console.Write(s + "   ");
                    Console.WriteLine();
                }
            }        /// <summary>
            /// 比较两个List<string>集合是否包含,若包含返回元素多者
            /// </summary>
            /// <param name="strList1"></param>
            /// <param name="strList2"></param>
            /// <returns></returns>
            public static List<string> CompareListString(List<string> strList1, List<string> strList2)
            {
                int strList1Count = strList1.Count();
                int strList2Count = strList2.Count();
                var compare = (from a in strList1
                               from b in strList2
                               where a.Equals(b)
                               select a).Count();
                if (compare == strList1Count)
                    return strList2;
                if (compare == strList2Count)
                    return strList1;
                return null;
            }        /// <summary>
            /// 确定一个List<string>集合是否是List<List<string>>的元素,是返回true,否则返回false
            /// </summary>
            /// <param name="item"></param>
            /// <param name="items"></param>
            /// <returns></returns>
            public static bool ListItemInListString(List<string> item, List<List<string>> items)
            {
                int listCount = item.Count();
                foreach (List<string> theItem in items)
                {
                    int equalCount = (from a in item
                                      from b in theItem
                                      where a.Equals(b)
                                      select a).Count();
                    if (listCount == equalCount && listCount == theItem.Count())
                        return true;
                }
                return false;
            }
        }
    }
      

  8.   


        class Program
        {
            static void Main(string[] args)
            {
                List<List<string>> list2 = new List<List<string>>()
                {
                  new List<string>(){"0","1"},new List<string>(){"4","6"},new List<string>(){"7","6","5"}
                };            List<List<string>> list1 = new List<List<string>>()
                {
                  new List<string>(){"2","1","0"},new List<string>(){"4","5","8"},new List<string>(){"3","6"}
                };
                list1.ListContain(list2).ForEach(x => { x.ForEach(y => Console.Write(y.PadLeft(5, ' '))); Console.WriteLine(); });
                Console.ReadLine();
            }
        }
        public static class Test
        {
            public static List<List<string>> ListContain(this List<List<string>> list1, List<List<string>> list2)
            {
                List<List<string>> result = new List<List<string>>();
                var query = from l1 in list1
                            from l2 in list2
                            let count = Math.Min(l1.Count, l2.Count)
                            where l1.Intersect(l2).Count() == count
                            select new { x = l1.Count > l2.Count ? l1 : l2 };
                foreach (var q in query)
                    result.Add(q.x);
                return result;
            }
        }
      

  9.   

    想请教一下:
    1: select new { x = l1.Count > l2.Count ? l1 : l2 };
    new 后面是啥语法,没有数据类型呢,
    2:result.Add(q.x); 不太懂,加q就行了啊,q.x是什么?
      

  10.   

    q是集合query集合 的一个实体对象  q.x是这个实体对象的一个属性