Как я могу перечислить все символы латинского алфавита? - PullRequest
6 голосов
/ 11 декабря 2011

Я ищу эффективный способ получения списка со всеми английскими (латинскими) символами.

A, B, C, .... , Z

Мне действительно не нужен конструктор, подобный этому:

// nasty way to create list of English alphabet
List<string> list = new List<string>();
list.Add("A");
list.Add("B");
....
list.Add("Z");

// use the list
...

Если вам интересно, как это можно использовать, я создаю механизм bin-tree.

Ответы [ 6 ]

13 голосов
/ 11 декабря 2011

Вы можете сделать это с помощью петли for:

List<char> list = new List<char>();
for (char c = 'A'; c <= 'Z'; ++c) {
    list.Add(c);
}

Если вы хотите List<string> вместо List<char>, используйте list.Add(c.ToString()); вместо.

Обратите внимание, чтоэто работает только потому, что буквы A - Z встречаются в Юникоде в последовательной последовательности (кодовые точки от 65 до 90).Тот же подход не обязательно работает для других алфавитов.

9 голосов
/ 11 декабря 2011

Здесь:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Эта строка представляет собой список символов.

Используйте либо ToCharArray, либо LINQ ToList для преобразования в перечисляемое по вашему выбору, хотя вы уже можете получить доступ к каждому элементу через индексатор строки Chars.

4 голосов
/ 11 декабря 2011

Использование LINQ

int charactersCount = 'Z' - 'A' + 1;
IList<char> all = Enumerable.Range('A', charactersCount)
                            .Union(Enumerable.Range('a', charactersCount))
                            .Select(i => (char)i)
                            .ToList();
2 голосов
/ 11 декабря 2011

Нет встроенного способа получить список строк, соответствующих каждому символу.Вы можете получить IEnumerable с помощью следующего кода, который, вероятно, подойдет для ваших целей.Вы также можете просто придерживаться массива в секции from.

var letters = from letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
              select letter.ToString();
1 голос
/ 11 декабря 2011

Вот мое решение (в конце концов)

const string driveLetters = "DEFGHIJKLMNOPQRSTUVWXYZ";

List<string> allDrives = new List<string>(driveLetters.Length);
allDrives = (from letter
        in driveLetters.ToCharArray()
        select letter).ToList();

Я закончил с этим решением, потому что первоначально моей целью было создать список всех доступных дисков в Windows. Это фактический код:

const string driveLetters = "DEFGHIJKLMNOPQRSTUVWXYZ";
const string driveNameTrails = @":\";

List<string> allDrives = (from letter
            in driveLetters.ToCharArray()
            select letter + driveNameTrails).ToList();

return allDrives;
0 голосов
/ 11 декабря 2011

Самый простой способ -

  int start = (int) 'A';
  int end = (int) 'Z';

  List<char> letters = new List<char>();

  for (int i = start; i <= end; i++)
  {
    letters.Add((char)i);  
  }

Точно так же, но меньше кода -

IEnumerable<char> linqLetters = Enumerable.Range(start, end - start + 1).Select(t => (char)t);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...