1teamsah
1teamsah

Reputation: 1933

how to count same elements in different arrays in C#

I've a list that contains 4 sized arrays:

enter image description here

These arrays have 4 elements. I want to use another list that contains these arrays' first element's count. In addition, if their first elements are same, they should be summation. For example:

list[0] = {1,2,3,4}
list[1] = {1,1,5,3}
list[2] = {1,2,5,8}
list[3] = {2,2,3,3}
list[4] = {3,5,5,6}
list[5] = {4,4,4,4}
list[6] = {4,5,5,6}

So, anotherList should be:

anotherList = {3, 1, 1, 2}

How can I do this?

EDIT: Expected result is:

enter image description here

Upvotes: 0

Views: 208

Answers (1)

Sergey Berezovskiy
Sergey Berezovskiy

Reputation: 236328

anotherList = list.Select(a => a[0]) // project each array to its first item
                  .GroupBy(x => x)   // group first items by their value
                  .Select(g => g.Count())  // select count of same items
                  .ToList(); 

Output:

[ 3, 1, 1, 2 ]

NOTE: GroupBy internally uses Lookup which returns groups in same order as the are added, so it seems to be what you want.

UPDATE: Approach which does not depend on internal implementation of GroupBy

anotherList = list.Select((a,i) => new { Item = a[0], Index = i })
                  .GroupBy(x => x.Item)
                  .OrderBy(g => g.Min(x => x.Index))
                  .Select(g => g.Count())
                  .ToList();

Upvotes: 6

Related Questions