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

时间:2016-11-08 07:48:54

标签: c#

我有一个对象列表,每个对象都有属性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

4 个答案:

答案 0 :(得分:13)

使用Linq:

{{1}}

答案 1 :(得分:5)

为什么要在<{1}}中存储不同的项?这似乎是一个错误的集合类型。我建议使用专为设计的List<T>

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

实施可以像

一样简单
HashSet<T>

测试

HashSet<int> result = new HashSet<int>(list.Select(item => item.total));

如果你坚持// 10, 11, 15 Console.Write(String.Join(", ", result));

List<int>

答案 2 :(得分:1)

您可以使用以下内容:

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

这会创建一个匿名类型的新列表,其中每个元素都有ToalName - 属性。但是,如果一个人聚集在一起,则只考虑一个组的第一个元素。

此解决方案的优势在于它可以保留Name - 属性。如果您不需要此功能且仅对Total感兴趣,那么其他人建议的Distinct会更容易。

答案 3 :(得分:1)

像这样吗?

using System.Linq;
...

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