Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表中删除具有重复特性的对象_C#_Arrays - Fatal编程技术网

C# 从列表中删除具有重复特性的对象

C# 从列表中删除具有重复特性的对象,c#,arrays,C#,Arrays,我有一个C语言的对象列表。所有对象都包含一个属性ID。 有多个对象具有相同的ID属性 在每个ID属性只有一个对象的情况下,如何修剪列表或创建新列表 [任何其他副本都将从列表中删除]如果要避免使用第三方库,可以执行以下操作: var bar = fooArray.GroupBy(x => x.Id).Select(x => x.First()).ToList(); 这将根据Id属性对数组进行分组,然后选择分组中的第一个条目。此外,如果执行此操作,则允许使用object ProePro

我有一个C语言的对象列表。所有对象都包含一个属性ID。 有多个对象具有相同的ID属性

在每个ID属性只有一个对象的情况下,如何修剪列表或创建新列表


[任何其他副本都将从列表中删除]

如果要避免使用第三方库,可以执行以下操作:

var bar = fooArray.GroupBy(x => x.Id).Select(x => x.First()).ToList();
这将根据Id属性对数组进行分组,然后选择分组中的第一个条目。

此外,如果执行此操作,则允许使用object ProeProperty进行区分。不幸的是,内置LINQ Distinct不灵活

var uniqueItems = allItems.DistinctBy(i => i.Id);
明显的

返回给定源的所有不同元素,其中 区分度通过投影和默认eqaulity确定 投影类型的比较器

PS:感谢与社区共享此图书馆

var list = GetListFromSomeWhere();
var list2 = GetListFromSomeWhere();
list.AddRange(list2);

....
...
var distinctedList = list.DistinctBy(x => x.ID).ToList();
更多林克在

或者,如果出于某种原因不想使用外部DLL,则可以使用此独特的重载:

public static IEnumerable<TSource> Distinct<TSource>(
    this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
用法:

public class FooComparer : IEqualityComparer<Foo>
{
    // Products are equal if their names and product numbers are equal.
    public bool Equals(Foo x, Foo y)
    {

        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        return x.ID == y.ID
    }
}



list.Distinct(new FooComparer());

不确定是否有人还在寻找其他方法来实现这一点。但我已经使用这段代码根据匹配的ID号从用户对象列表中删除了重复项

private ArrayList RemoveSearchDuplicatesArrayList搜索结果 { ArrayList TempList=新的ArrayList; 搜索结果中的foreach用户u1 { bool duplicatefound=false; TempList中的foreach用户u2 如果u1.ID==u2.ID duplicatefound=true; 如果!找到重复项 templast.Addu1; } 返回圣殿骑士; }
调用:SearchResults=RemoveSearchDuplicateSearchResults

这在我的实现中非常有效:List uniqueRows=inputRows.GroupByx=>x.Id.Selectx=>x.First.ToList;很乐意帮忙!注意:收费表上的数字是多余的。你应该能够这样做。ToList你是对的,它只使用ToList而不是ToList,这是一个很好的替代方法,而不是试图找出为什么使用distinct和iquatable不起作用。我认为这是一个很好的解决方案,但我正试图避免使用第三方库。谢谢。幸运的是,您可以看到它是如何实现的这在^2上是毫无意义的,而常规GroupBy刚刚启用。。。