我有一个对象列表,每个对象都有属性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
答案 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
});
这会创建一个匿名类型的新列表,其中每个元素都有Toal
和Name
- 属性。但是,如果一个人聚集在一起,则只考虑一个组的第一个元素。
此解决方案的优势在于它可以保留Name
- 属性。如果您不需要此功能且仅对Total
感兴趣,那么其他人建议的Distinct
会更容易。
答案 3 :(得分:1)
像这样吗?
using System.Linq;
...
var list = new List <YourClass>();
...
var newList = list.Select(i => i.total).Distinct().ToList ();