如何从对象列表中创建一个不同的整数列表

本文关键字:列表 一个 整数 对象 创建 | 更新日期: 2023-09-27 18:16:50

我有一个对象列表,每个对象都有属性total

我需要从上面的列表创建一个新的List<int>。问题是,如果两个对象有total =4, List<int>应该只包含一个'4'。

让我的列表是:

[
    {name: "vishnu" , total: 10},
    {name: "vishnu2", total: 11},
    {name: "vishnu3", total: 15},
    {name: "vishnu4", total: 10}
]

所以在我的整数列表中输出应该是:

10、11、15

和非

10、11、15、10

如何从对象列表中创建一个不同的整数列表

using Linq:

myObjects.Select(obj => obj.total).Distinct().ToList()

为什么要在List<T>中存储不同的项?这似乎是一个错误的集合类型。我建议使用HashSet<T>,它是专门为:

设计的。

https://msdn.microsoft.com/en-us/library/bb359438 (v = vs.110) . aspx

实现可以像

一样简单
HashSet<int> result = new HashSet<int>(list.Select(item => item.total));

测试
// 10, 11, 15
Console.Write(String.Join(", ", result));

如果你坚持List<int>:

List<int> myList = result.ToList();

是这样的吗?

using System.Linq;
...
var list = new List <YourClass>();
...
var newList = list.Select(i => i.total).Distinct().ToList ();

你可以这样写:

var result = myInput.GroupBy(x => x.Total).Select(x => new 
{ 
    Total = x.Key, 
    Name = x.First().Name 
});

创建一个匿名列表,其中每个元素都有一个Toal和一个Name属性。但是,如果组中有多个元素,则只考虑组中的第一个元素。

这个解决方案的优点是它保留了Name -属性。如果您不需要这个,并且只对Total感兴趣,那么其他人建议的Distinct更容易。