I'd like to know if there's a more efficient way to get an ordered list of groups by value from an initially unordered list, than using GroupBy()
followed by OrderBy()
, like this:
List<int> list = new List<int>();
IEnumerable<IEnumerable<int>> orderedGroups = list.GroupBy(x => x).OrderBy(x => x.Key);
For more detail, I have a large List<T>
which I'd like to sort, however there are lots of duplicate values so I want to return the results as IEnumerable<IEnumerable<T>>
, much as GroupBy()
returns an IEnumerable
of groups. If I use OrderBy()
, I just get IEnumerable<T>
, with no easy way to know whether the value has changed from one item to the next. I could group the list then sort the groups, but the list is large so this ends up being slow. Since OrderBy()
returns an OrderedEnumerable
which can then be sorted on a secondary field using ThenBy()
, it must internally distinguish between adjacent items with the same or different values.
Is there any way I can make use of the fact that OrderedEnumerable<T>
must internally group its results by value (in order to facilitate ThenBy()
), or otherwise what's the most efficient way to use LINQ to get an ordered list of groups?