c# - Manera más rápida de enumerar el alfabeto
alphabet (8)
Quiero iterar sobre el alfabeto así:
foreach(char c in alphabet)
{
//do something with letter
}
¿Es una matriz de caracteres la mejor manera de hacer esto? (se siente raro)
Edición: la métrica es "menos escritura para implementar mientras aún es legible y robusta"
(Asume ASCII, etc.)
for (char c = ''A''; c <= ''Z''; c++)
{
//do something with letter
}
De forma alternativa, puede dividirlo en un proveedor y usar un iterador (si está planeando apoyar la internacionalización):
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
}
Bien, para usar el bucle foreach
en C #, el alfabeto puede ser cualquier IEnumerable<char>
. ¿Qué se siente "hacky" al respecto?
Encontré esto:
foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; }))
{
//breakpoint here to confirm
}
Mientras leía este blog al azar, pensé que era una forma interesante de realizar la tarea.
O podrias hacer,
string alphabet = "abcdefghijklmnopqrstuvwxyz";
foreach(char c in alphabet)
{
//do something with letter
}
Podrías hacer esto:
for(int i = 65; i <= 95; i++)
{
//use System.Convert.ToChar() f.e. here
doSomethingWithTheChar(Convert.ToChar(i));
}
Aunque, tampoco es la mejor manera. Tal vez podríamos ayudar mejor si supiéramos la razón de esto.
Use Enumerable.Range
:
Enumerable.Range(''A'', (''Z'' - ''A'' + 1)).Select(i => (char)i)
var alphabet = Enumerable.Range(0, 26).Select(i => Convert.ToChar(''A'' + i));
Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(c.A));