使用 Linq 将包含基元数据的对象列表分组为新的分组对象列表

Ali*_*heh 5 c# linq list

我有一个包含不同原始数据类型的对象列表:

List<object> list = new List<object>() { 
  3, "cat", 4.1, 'a', 5, "dog", "horse", 9.1, 'd', 1 
};
Run Code Online (Sandbox Code Playgroud)

我希望能够在上面的列表上运行 Linq 查询,将所有元素按数据类型和顺序分组为(字符串、整数、双精度、字符)(如果这有意义?)。就像是:

list = { "cat","dog", "horse", 3, 5, 1, 4.1, 9.1, 'a', 'd' }
Run Code Online (Sandbox Code Playgroud)

我尝试从

使用 Linq 将对象列表分组为新的对象列表分组列表

代码

lst
  .GroupBy(x => x.GetType())
  .Select(grp => grp.ToList())
  .ToList()
  .ForEach(group => group.ForEach(item => Console.WriteLine(item)));
Run Code Online (Sandbox Code Playgroud)

有效,但没有给出所需的输出。

输出

 { 3, 5, 1, "cat","dog", "horse",4.1, 9.1, 'a', 'd' }
Run Code Online (Sandbox Code Playgroud)

Pav*_*ski 2

您可以按降序排列类型名称Select,它会给您所需的输出 - (字符串,整数,双精度,字符)项目

list.GroupBy(x => x.GetType())
    .OrderByDescending(g => g.Key.Name)
    .Select(grp => grp.ToList())
    .ToList()
    .ForEach(group => group.ForEach(Console.WriteLine));
Run Code Online (Sandbox Code Playgroud)

另一个选项是按IsPrimitive属性排序OrderBy(g => g.Key.IsPrimitive),对于您的特定数据,它也会提供所需的输出