按名称对列表项进行分组

时间:2019-04-26 08:09:28

标签: c# asp.net list grouping

我有一个包含重复项的列表。我需要将它们按相同的顺序分组。

我在LINQ中发现了许多解决方案,可以根据某个键对列表项进行分组。

例如:-

我下面有一个列表

tbl1
tbl1
tbl2
tbl3
tbl1
tbl4
tbl2

我需要像下面这样分组

tbl1
tbl1
tbl1 
tbl1
tbl2
tbl2
tbl3
tbl4

这可以实现吗?

4 个答案:

答案 0 :(得分:1)

您不希望分组,而是要更改列表的顺序。 C#使用Sort()方法自然地将其内置。

根据您的问题,我假设,您的userListList<string>。在这种情况下,只需使用以下代码即可:

userList.Sort();

但是,假设您的userListList<SomeObject>,则可以通过以下方式使用Linq进行此操作:

假设您的对象类似于:

class MyObject
{
    public string Name;
    // Whatever other properties
}

您可以使用:

var userList = new List<MyObject>();
// Whatever extra code...
userList = userList.OrderBy(v => v.Name).ToList();

希望能成功!

答案 1 :(得分:0)

您可以直接使用GroupBy()方法。

List<string> elements = new List<string>() //lets consider them as strings
{
  "tbl1",
  "tbl1",
  "tbl2",
  "tbl3",
  "tbl1",
  "tbl4",
  "tbl2"
};
var groups = elements.OrderBy(x=>x).GroupBy(x => x);//group them according to their value
foreach(var group in groups)
{
  foreach (var el in group) Console.WriteLine(el);
}

答案 2 :(得分:0)

您说要对它们进行分组,但是所提供的示例表明您需要订购它们。

如果要删除重复的项目,则需要:

var groupedCustomerList = userList
    .GroupBy(u => u.GroupID)
    .ToList();

但是,如果您需要如示例中所示订购它们,则需要编写如下内容:

var groupedCustomerList = userList
    .OrderBy(u => u.GroupID)
    .ToList();

var groupedCustomerList = userList.Sort();

答案 3 :(得分:0)

您可以在Group的帮助下扩展SelectMany

   var groupedCustomerList = userList
     .GroupBy(u => u.GroupID)     // Grouping
     .SelectMany(group => group)  // Expand groups back (flatten)
     .ToList();

发生了什么事

initial:          {tbl1, tbl1, tbl2, tbl3, tbl1, tbl4, tbl2}
after GroupBy:    {Key = "1", {tbl1, tbl1, tbl1}},
                  {Key = "2", {tbl2, tbl2}},
                  {Key = "3", {tbl3}},
                  {Key = "4", {tbl4}},
after SelectMany: {tbl1, tbl1, tbl1, tbl2, tbl2, tbl3, tbl4}