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的交集谢谢!!!
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的交集谢谢!!!
解决方案 »
- 求教匹配首尾字符串的正则
- VS2005支持.NET3.0及以后更高的版本吗?
- TCP/IP 十六进制的数据分析的出来吗?
- 关于System.Configuration.ConfigurationManager.AppSettings[key];的问题
- 针对命令行程序的测试
- vs2005开发单机程序,SqlExpress2005 能随程序一起发布安装吗?
- 从局域网中其他电脑拷贝文件
- visual studio 2005 的beta 版到目前为止只有beta1一个版本吗?
- 请问有这种方法吗?具体见下。
- 如何在程序中设置打印机的选项(如:自定义纸张大小,纸张来源,打印方向,纸张输出大小等)???
- 页面刷新问题,请麻烦大家帮忙解决下!
- 如何向listview已存在的列中更改某列的值
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();
}
}
List<List<string>> list1 = new List<List<string>>();
List<List<string>> list2 = new List<List<string>>();
的交集
它们的元素类型是List<string>
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();
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"}
}这下,我阐述清楚了吧那,请动手吧...写出过程,得到结果
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;
}
}
}
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;
}
}
1: select new { x = l1.Count > l2.Count ? l1 : l2 };
new 后面是啥语法,没有数据类型呢,
2:result.Add(q.x); 不太懂,加q就行了啊,q.x是什么?