2016-11-08 61 views
5

Tôi có một danh sách các đối tượng, mỗi đối tượng có thuộc tính total.Làm thế nào để tạo một danh sách các số nguyên riêng biệt từ một danh sách các đối tượng?

tôi cần tạo mới List<int> từ danh sách ở trên. vấn đề là nếu hai đối tượng có total = 4, thì List<int> chỉ nên chứa một '4'.

để danh sách của tôi là:

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

như vậy trong danh sách các số nguyên sản lượng nên là:

10,11,15

và không:

10,11,15,10

+4

bạn có thể vui lòng thêm mã của mình – fubo

Trả lời

10

sử dụng LINQ:

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

Lưu ý cho tương lai: mã gói với ''' tạo khối mã (hữu ích cho nội tuyến trong một câu), mặc dù bốn dấu cách ở đầu (hoặc nhấn ctrl - k trong khi tô sáng mã) cung cấp một khối tìm kiếm đẹp hơn với cú pháp tô sáng – Rob

+0

Giải pháp là giống nhau –

+0

@MongZhu Đó là ba phút trước đó.Mặc dù nhiều tuyên bố ** chỉ ** vấn đề chất lượng trên SO cũng có một yếu tố thời gian rất lớn, làm cho câu trả lời đầu tiên là một trong những chú ý nhất. – HimBromBeere

1

Bạn có thể sử dụng một cái gì đó như thế này:

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

Điều này tạo ra một danh sách mới của loại vô danh mà mỗi phần tử có một ToalName -property. Tuy nhiên chỉ có yếu tố đầu tiên của một nhóm được xem xét nếu nhiều hơn thì một trong những được gropued với nhau.

Giải pháp này có lợi thế là nó vẫn giữ nguyên mức Name -properties. Nếu bạn không cần điều này và chỉ quan tâm đến Total, thì Distinct theo đề xuất của người khác sẽ dễ dàng hơn.

1

Thỉnh thoảng như thế này?

using System.Linq; 
... 

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

Tại sao bạn muốn để lưu trữ biệt mục trong một List<T>? Nó có vẻ là một loại bộ sưu tập sai. Tôi đề nghị sử dụng HashSet<T> đã được đặc biệt thiết kế cho rằng:

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

Việc thực hiện có thể đơn giản như

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

thử nghiệm

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

Nếu bạn nhấn mạnh vào List<int> :

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

tôi muốn hiển thị một danh sách thả xuống với tổng số no.s, vì vậy một danh sách int là đủ ryt? –

+0

@hilda sonica: hiển thị các số riêng biệt chỉ 'myComboBox.Items.AddRange (list.Select (item => item.total) .Distinct(). Chọn (item => (object) item) .ToArray()); '; để hiển thị các mục với số lượng của chúng: 'myComboBox.Items.AddRange (list.GroupBy (item => item.total) .Select (chunk => $" {chunk.Key}: {chunk.Count()} mục (s)) "). ToArray());' –

Các vấn đề liên quan