Już precyzuje.
Bawię się z tym LINQ i mam coś takiego:
Klasa kontener:
namespace Test
{
class Kontener
{
public int ID { get; set; }
public string Name { get; set; }
public double Liczba { get; set; }
public int Wiek { get; set; }
public Kontener(int ID, string Name, double Liczba, int Wiek)
{
this.ID = ID;
this.Name = Name;
this.Liczba = Liczba;
this.Wiek = Wiek;
}
}
}
Program główny:
namespace Test
{
class Program
{
static void Main(string[] args)
{
Random random = new Random();
List<Kontener> lista = new List<Kontener>();
lista.Add(new Kontener(1, "Wojtek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(2, "Zbigniew", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(1, "Ola", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(1, "Martynka", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(1, "Wiesiek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(2, "Jola", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(3, "Mirek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(2, "Zbyszek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(2, "Zbyszek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(2, "Zenek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(3, "Andrzej", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(3, "Gosia", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(3, "Ela", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(1, "Maciek", random.NextDouble() * 10, random.Next(1, 99)));
lista.Add(new Kontener(3, "Krysia", random.NextDouble() * 10, random.Next(1, 99)));
foreach (Kontener k in lista)
{
Console.WriteLine(k.ID.ToString() + " " + k.Name + ", wiek: " + k.Wiek.ToString() + ", liczba: " + k.Liczba.ToString());
}
var srednia1 = lista.Where(p => p.ID == 1).Average(p => p.Liczba);
var srednia2 = lista.Where(p => p.ID == 2).Average(p => p.Liczba);
var srednia3 = lista.Where(p => p.ID == 3).Average(p => p.Liczba);
Console.WriteLine(String.Empty);
Console.WriteLine("Średnia dla 1: " + srednia1.ToString());
Console.WriteLine("Średnia dla 2: " + srednia2.ToString());
Console.WriteLine("Średnia dla 3: " + srednia3.ToString());
var test = lista.GroupBy(p => p.ID);
Console.ReadKey();
}
}
}
Wartości: srednia1, srednia2, srednia3 - fajnie. O to mi chodziło, to znaczy policzone średnie z pola Liczba dla każdego numeru ID
W debugerze podejrzałem, że GroupBy zwraca mi 3 obiekty pogrupowane po ID - super.
Teraz jak połączyć GroupBy z liczeniem średniej? Różnych pól ID może być mnóstwo, więc chciałbym, żeby średnie dla każdego pola ID zostały wrzucone do innej kolekcji automatycznie.
P.S. Jak dodajecie formatowanie kody w C#? Znacznik "```c#" nie działa