我有一个包含重复项的列表。我需要将它们按相同的顺序分组。
我在LINQ中发现了许多解决方案,可以根据某个键对列表项进行分组。例如:-
我下面有一个列表
tbl1
tbl1
tbl2
tbl3
tbl1
tbl4
tbl2
我需要像下面这样分组
tbl1
tbl1
tbl1
tbl1
tbl2
tbl2
tbl3
tbl4
这可以实现吗?
答案 0 :(得分:1)
您不希望分组,而是要更改列表的顺序。 C#使用Sort()
方法自然地将其内置。
根据您的问题,我假设,您的userList
是List<string>
。在这种情况下,只需使用以下代码即可:
userList.Sort();
但是,假设您的userList
是List<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}