Группировать элементы списка по имени - PullRequest
1 голос
/ 26 апреля 2019

У меня есть список с дубликатами. Мне нужно сгруппировать их в том же порядке.

Я нашел много решений в LINQ для группировки элементов списка по некоторому ключу.

Например: -

У меня есть список, как показано ниже

tbl1
tbl1
tbl2
tbl3
tbl1
tbl4
tbl2

Мне нужно сгруппировать его, как показано ниже

tbl1
tbl1
tbl1 
tbl1
tbl2
tbl2
tbl3
tbl4

Может ли это быть достигнуто.

Ответы [ 4 ]

1 голос
/ 26 апреля 2019

Вы не хотите группировать, вы хотите изменить порядок списка.В 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();

Надеюсь, что сработает!

0 голосов
/ 26 апреля 2019

Вы можете расширить 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}
0 голосов
/ 26 апреля 2019

Вы говорите, что хотите сгруппировать их, но приведенный вами пример показывает, что вам нужно их заказать.

Если вы хотите удалить дубликаты, вам нужно:

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

Но, если вам нужно заказать их, как показано в примере, вам нужно написать что-то вроде этого:

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

или

var groupedCustomerList = userList.Sort();
0 голосов
/ 26 апреля 2019

Вы можете использовать метод 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...