我有自定义类型名称 Netsgroup ,它是 Net 类的集合。
Net 类,contsains: Netname 和字符串部件的列表。
class Netsgroup: CollectionBase
{
// a collection of nets
public Net[] nets
{
get { return (Net[]) this.InnerList.ToArray(typeof(Net)); }
}
}
public class Net
{
string netname;
public string Netname
{
get { return netname; }
set { netname = value; }
}
List<string> parts= new List<string>();
public List<string> Parts
{
get { return parts; }
}
}
Netsgroup的一个例子是:
Net1 u1,u2,u3
Net2 u4,u5,u3
Net3 u4,u6,u7
每一行都有Netname和Parts。
我想找到Netsgroup集合中的重复项。
喜欢:
net1,net2有u3
net2,net3有u4
如何与所有网络中的部分相交以查找重复项?
谢谢,Avi。
答案 0 :(得分:2)
我认为使用LINQ最容易做到这一点:
var duplicates =
from net in netsgroup.nets
from part in net.Parts
group net by part into g
where g.Count() >= 2
select g;
如果要以指定的格式将结果写入控制台,可以使用以下内容:
foreach (var dup in duplicates)
Console.WriteLine(
"{0} has {1}", string.Join(", ", dup.Select(n => n.Netname)), dup.Key);
答案 1 :(得分:1)
IEnumerable<string> parts1 = netGroup1.nets.SelectMany(n => n.Parts);
IEnumerable<string> parts2 = netGroup2.nets.SelectMany(n => n.Parts);
IEnumerable<string> intersectedNets = Enumerable.Intersect(parts1, parts2);