2016-11-08 31 views
5

Nesnelerin bir listesi var, her bir nesnenin özelliği total.Nesnelerin bir listesinden farklı bir tam sayı listesi nasıl oluşturulur?

Yukarıdaki listeden yeni bir List<int> oluşturmanız gerekiyor. İki nesne total = 4 ise, List<int> yalnızca bir '4' içermelidir.

benim liste olsun:

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

böylece tamsayılar listemde çıktı olmalıdır:

10,11,15

değil:

10,11,15,10

Linq kullanarak
+4

kodunuzu ekleyebilir misiniz? – fubo

cevap

10

:

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

Bu, her eleman bir Toal ve Name -property sahiptir anonim türde yeni bir liste oluşturur:

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

Gelecek için not: '' ile kod kaydırma, başlangıçta dört boşluk olsa da (bir cümle içinde satır içi yazmak için yararlı) kodlama yapar (veya vurgu yaparken ctrl - k tuşlarına basarsanız) kod) – Rob

+0

vurgulama sözdizimi ile güzel görünümlü bir blok sağlar. Çözüm aynı –

+0

@MongZhu Bu üç dakika önceydi.Her ne kadar pek çok iddia ** sadece ** kalitesi, aynı zamanda büyük bir zaman faktörü de var ki, en çok dikkati çeken ilk cevap. – HimBromBeere

1

Böyle bir şey kullanabilirsiniz. Bununla birlikte, bir grubun bir araya getirilmesi durumunda, sadece bir grubun ilk unsuru dikkate alınır.

Bu çözüm, Name -properties'in devam etmesi avantajına sahiptir. Buna ihtiyacınız yoksa ve sadece Total ile ilgileniyorsanız, başkaları tarafından önerilen şekilde Distinct daha kolaydır.

1

Böyle mi çekiyorsunuz?

using System.Linq; 
... 

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

Neden List<T> içinde ayrı öğeleri saklamak istiyorsunuz? Yanlış bir koleksiyon tipi gibi görünüyor. Eğer List<int> ısrar ederse kadar basit Testi

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

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

olarak

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

uygulama olabilir: Ben özel olarak o için dizayn edilmiştir HashSet<T> kullanmanızı öneririz :

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

Toplam no.s ile bir açılırma göstermek istiyorum, bu yüzden int listesi bir ryt mı? –

+0

@hilda sonica: sadece farklı sayıları göstermek için "myComboBox.Items.AddRange (list.Select (item => item.total) .Distinct(). (Item => (object) item) .ToArray()); '; kendi miktarları ile öğeleri göstermek için: 'myComboBox.Items.AddRange (list.GroupBy (item => item.total) .Select (chunk => $" {chunk.Key}: {chunk.Count()} items (ler)) ") ToArray().); ' –

İlgili konular