对象列表。找到两个具有相同名称的对象

时间:2016-08-04 10:44:02

标签: c#

我有一个对象列表。对象有一个名字。如何在列表中找到具有相同名称的两个对象。 现在我将foreach循环中的所有对象名称写入字符串列表,然后检查它们。 有没有办法检查对象的相同名称而不将其写入字符串列表以检查此列表? 所以我的代码看起来像这样:

List<string> objectnames = new List<string>();

foreach (object obj in DBobjects)
{
    objectnames.Add(obj.name);
}

var doublicates = objectnames.GroupBy(x => x).Where(x => x.Count() > 1 ).Select(x => x.Key);

if(doublicates.Any())
{
    foreach(string name in doublicates)
    {
        //do something with each dublicate
    }
}

2 个答案:

答案 0 :(得分:6)

为什么不对DBobjects

进行分组
var allDuplicates = DBobjects.GroupBy(o => o.name).Where(g => g.Count() > 1);

如果您愿意,可以将其转换为从name到具有该名称的对象列表的字典映射:

var dict = allDuplicates.ToDictionary(g => g.Key, g => g.ToList());

现在您可以列出所有重复项:

foreach(string name in dict.Keys)
{
    Console.WriteLine($"There are {dict[name].Count} entries with name {name}:");
    foreach(var o in dict[name])
        Console.Write("    " + o.ToString());
}

答案 1 :(得分:1)

您可以直接在原始列表中使用它:

var doublicates = DBobjects.GroupBy(x => x.name)
                           .Where(x => x.Count() > 1 )
                           .Select(x => new { Name = x.Key, objs = x.ToList() });

foreach(var duplicate in doublicates)
{
    // do something with duplicate.Name and duplicate.objs
}