Самый быстрый способ перечислить алфавит
Я хочу перебрать алфавит вот так:
foreach(char c in alphabet)
{
//do something with letter
}
является ли массив символов лучшим способом сделать это? (чувствует себя хаки)
Edit: метрика "наименее типизирована для реализации, пока она все еще читаема и надежна"
8 ответов:
(предполагает 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 }
или вы могли бы сделать,
string alphabet = "abcdefghijklmnopqrstuvwxyz"; foreach(char c in alphabet) { //do something with letter }
Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(c.A));
хорошо использовать
foreach
цикл в C#, алфавит может быть любойIEnumerable<char>
. Что чувствует себя "хаки" об этом?
вы могли бы сделать это:
for(int i = 65; i <= 95; i++) { //use System.Convert.ToChar() f.e. here doSomethingWithTheChar(Convert.ToChar(i)); }
хотя, не самый лучший способ либо. Может быть, мы могли бы помочь лучше, если бы знали причину этого.
Я нашел вот это:
foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; })) { //breakpoint here to confirm }
при случайном чтении этого блог, и подумал, что это интересный способ выполнить задачу.
использовать
Enumerable.Range
:Enumerable.Range('A', ('Z' - 'A' + 1)).Select(i => (char)i)