Самый быстрый способ перечисления алфавита
Я хочу перебрать по алфавиту так:
foreach(char c in alphabet)
{
//do something with letter
}
Является ли массив символов лучшим способом для этого? (чувствует себя взломанным)
Изменить: метрика - это "наименее типизируемая для реализации, хотя она еще доступна для чтения и надежна"
Ответы
Ответ 1
(подразумевается ASCII и т.д.)
for (char c = 'A'; c <= 'Z'; c++)
{
//do something with letter
}
В качестве альтернативы вы можете разделить его на поставщика и использовать итератор (если вы планируете поддерживать интернационализацию):
public class EnglishAlphabetProvider : IAlphabetProvider
{
public IEnumerable<char> GetAlphabet()
{
for (char c = 'A'; c <= 'Z'; c++)
{
yield return c;
}
}
}
IAlphabetProvider provider = new EnglishAlphabetProvider();
foreach (char c in provider.GetAlphabet())
{
//do something with letter
}
Ответ 2
Или вы могли бы сделать,
string alphabet = "abcdefghijklmnopqrstuvwxyz";
foreach(char c in alphabet)
{
//do something with letter
}
Ответ 3
var alphabet = Enumerable.Range(0, 26).Select(i => Convert.ToChar('A' + i));
Ответ 4
Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(c.A));
Ответ 5
Хорошо использовать цикл foreach
в С#, алфавит может быть любым IEnumerable<char>
. Что чувствует себя "взломанным"?
Ответ 6
Вы можете сделать это:
for(int i = 65; i <= 95; i++)
{
//use System.Convert.ToChar() f.e. here
doSomethingWithTheChar(Convert.ToChar(i));
}
Хотя, это не лучший способ. Может быть, мы могли бы помочь лучше, если бы знали причину этого.
Ответ 7
Я нашел это:
foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; }))
{
//breakpoint here to confirm
}
при случайном чтении этого blog и подумал, что это интересный способ выполнить задачу.