Mam listę, która może zawierać wiele wystąpień tego samego obiektu. Teraz muszę policzyć, jak często dany obiekt znajduje się na tej liście.Numer licznika danego obiektu na liście z LINQ
int count = 0;
foreach (IMyObject item in myList)
if (item == object2Count)
count++;
Jestem pewien, że można to zrobić lepiej dzięki LINQ, ale LINQ wciąż jest dla mnie tajemnicą.
Moje pierwsze pytanie brzmi: jak policzyć obiekty przez LINQ i drugie pytanie: czy ta wersja LINQ będzie wolniejsza czy szybsza? Używam ObservableCollection oraz liczbę pozycji na liście jest usally raczej mały ... usally nie więcej niż 20.
góry dzięki,
Frank
Dzięki za odpowiedź. Teraz, gdy widzę odpowiedź, wydaje się to oczywiste w ten sposób: D. Co do mojego orzeczenia, co jest dziwnego w tym przypadku i jak zaproponowałbyś napisanie go w inny sposób? – Aaginor
@Aaginor: Jeśli '==' używa równości odniesienia i nie przechowujesz tej samej instancji więcej niż jeden raz w zbiorze 'count' będzie 0 lub 1. Więc w zasadzie decydujesz, czy' object2Count' należy do kolekcji . Istnieją bardziej wydajne sposoby określania tego za pomocą metody rozszerzania "Any". Jeśli z drugiej strony przesłoniłeś operatora '==', twój predykat jest w porządku. –
Nie tworzę duplikatu obiektu, który ma być przechowywany, ale wielokrotnie przechowuję ten sam odnośnik. (Tak jak IMyObject o = new MyObject(); myList.Add (o); myList.Add (o);) (A przynajmniej uważam, że przechowuję ten sam obiekt: D) – Aaginor