Разбейте алфавитный список, начав букву [C #] - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть список, он уже отсортирован в алфавитном порядке. Я хотел бы разбить его на разделы, соответствующие букве начинается с, например:

A

  • aListItem1
  • aListItem2
  • aListItem3

B

  • bListItem1
  • bListItem2
  • bListItem3

C

  • cListItem1
  • cListItem2
  • cListItem3

...

Я мог бы сделать что-то вроде:

элемент foreach в списке если элемент начинается с ... сделай что-нибудь если элемент начинается с B ... сделай что-нибудь если элемент начинается с C ... сделай что-нибудь

и т.д ...

но есть ли более краткий способ сделать это?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Вы можете использовать метод Linq GroupBy для создания своих разделов:

foreach (var group in list.GroupBy(i => i[0]))
{
   Console.WriteLine("Section: " + group.Key);

   foreach (var elt in group)
   {
      Console.WriteLine(elt);
   }
}
2 голосов
/ 05 декабря 2011

Просто следите за текущей первой буквой на ходу:

char first = '\0';
foreach(string item in list){
     if(item[0] != first){
         first = item[0];
         Console.WriteLine(first);
     }

     Console.WriteLine("  *  " + item);
}
1 голос
/ 05 декабря 2011
var list = new List<string>() {"a1", "a2", "b1", "b2"};
var grouped = from item in list
              group item by item.First() into g
              select new {StartsWith = g.Key, Items = g};
...