działanie na kolekcji, zliczanie powtarzających się elementów

0

Witam, mam kolekcje dictionary w której magazynuje obiekty różnych klas, jednak dzięki dziedziczeniu maja pole wspólne, jest to identyfikatorpoprzednika.

Teraz nie mogę znaleźć funkcji której wynikiem byłaby ilość wystapień danej liczby, np mamy 9 obiektów i wyrzuca mi w ilu obiektach te pole ma wartość 1.

Pozdrawiam

2

Jeśli chcesz sprawdzić ile razy dana liczba występuje to możesz to zrobić zwykła pętlą. Wystarczy przejść po całej kolekcji i jeśli liczba == interesujaca cię liczba to ilość_wystąpień++.
Jednak jeśli chodzi o to aby wiedzieć jaka liczba występuje ile razy to można łatwo to uzyskać przez LINQ + group by.
Dla przykładu takie zapytanie może zwrócić:
liczba 1 występuje 3 razy,
liczba 4 występuje 2 razy itd.
Oczywiście można to samo uzyskać z pętlami, ale jak kto woli ;)

0

LINQ rozwiąże Twoje problemy.

static void Main( string[] args )
{
    var osoby = new Osoba[]{
        new Osoba{ Imie = "Jan", Nazwisko = "Kowalski" },
        new Osoba{ Imie = "Jan", Nazwisko = "Nowak" },
        new Osoba{ Imie = "Malgorzata", Nazwisko = "Kowalska" },
        new Osoba{ Imie = "Antoni", Nazwisko="Wiśniewski" }
    };

    Console.WriteLine( osoby.Count(osoba => osoba.Imie == "Jan"));

    Console.ReadLine();
}

class Osoba
{
    public string Imie;
    public string Nazwisko;    
}
1

@Zenek1999: nie miałeś aby na myśli

	var n = osoby.GroupBy(o => o.Imie).Select(o => new { Count = o.Count(), Name = o.Key });
	foreach (var m in n)
		Console.WriteLine("{0} {1}", m.Count, m.Name);

?

0

Nie, miałem na myśli to co napisałem. ;-)

Teraz nie mogę znaleźć funkcji której wynikiem byłaby ilość wystapień danej liczby, np mamy 9 obiektów i wyrzuca mi w ilu obiektach te pole ma wartość 1.

U mnie w przykładzie "te pole" = Imie, a "dana wartość" = "Jan".

1 użytkowników online, w tym zalogowanych: 0, gości: 1