过滤列表:仅获取对象中的唯一元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤列表:仅获取对象中的唯一元素相关的知识,希望对你有一定的参考价值。

如果我的术语在这里,我提前道歉,我还是asp.net的新手。

我有这样的模型:

public class Order
{
    public int FoodId { get; set; }
    public int Amount { get; set; }
}

我有一个订单列表,我想为其创建一个副本,每个FoodId只包含一个元素。所以,如果我有这个:

1, 5
2, 3
1, 2
2, 6
3, 1

我希望得到一个这样的列表:

1, 5
2, 3
3, 1

金额内部对我来说无关紧要,我只想查看第一个列表中存在的所有唯一FoodId的列表。我更喜欢使用lambda函数,就像这样(显然不是真正的代码):

List<Models.Order> FoodList = new List<Models.Order>(
    OrderList.ForEach(o => FoodList.FindAll(if(o.FoodId not in Foodlist) return o))
);
答案

您可能应该使用GroupBy方法,如下所示:

OrderList.GroupBy(x => x.FoodId).Select(g => g.First()).ToList();
另一答案

如果您只对独特的食品ID感兴趣,您可以先选择它们,然后使用Distinct方法,例如:

OrderList.Select(x => x.FoodId).Distinct();
另一答案

你可以使用distinct()来解决这个问题

如下

yourlist.Select(x => x.FoodId).Distinct();
另一答案

您可以实现自定义比较器

public class CustomComparer : IEqualityComparer<Order>
    {
        public bool Equals(Order x, Order y)
        {
            return x.FoodId == y.FoodId;
        }

        public int GetHashCode(Order obj)
        {
            return obj.FoodId.GetHashCode();
        }
    }

并将其传递给Distinct()方法

var newList = FoodList.Distinct(new CustomComparer()).ToList();

以上是关于过滤列表:仅获取对象中的唯一元素的主要内容,如果未能解决你的问题,请参考以下文章

如何从 React 中的对象数组中仅返回 3 个元素

从ios中的数组获取完整的对象

片段中的 notifyDataSetChanged() 不刷新列表视图

从 Python 中的多个列表中仅选择一个唯一元素

从列表中获取唯一项目[重复]

XtraGrid 列中的唯一值列表