115 votes

Génération d'un tableau de lettres de l'alphabet

Existe-t-il un moyen simple de générer un tableau contenant les lettres de l'alphabet en C# ? Il n'est pas trop difficile de le faire à la main, mais je me demandais s'il existait un moyen intégré de le faire.

0 votes

FYI, cette question a déjà été posée auparavant en tenant compte de l'internationalisation.

7 votes

Non, c'est juste une de ces questions où je me demande s'il n'y a pas une meilleure façon de faire :)

236voto

Bob Points 34449

Je ne pense pas qu'il y ait un moyen intégré, mais je pense que le plus simple serait de

  char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

8 votes

Il fonctionne également sur d'autres alphabets, à condition de placer la chaîne dans une ressource :)

1 votes

C'est le meilleur moyen si vous voulez vous assurer que votre code fonctionne sur des machines ayant des langues différentes. Sinon, si vous générez votre alphabet de manière dynamique (comme d'autres réponses ci-dessous), vous risquez d'obtenir un alphabet différent sur différentes machines.

1 votes

Comment cela fonctionne-t-il avec différentes langues ? Est-ce que, comme par magie, il contiendra des lettres chinoises ou des lettres d'autres langues ?

117voto

Pop Catalin Points 25033

C# 3.0 :

char[] az = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToArray();
foreach (var c in az)
{
    Console.WriteLine(c);
}

oui, cela fonctionne même si la seule surcharge de Enumerable.Range accepte des paramètres int ;-)

0 votes

'z' - 'a' + 1 = Cela semble vraiment maladroit, mais je ne vois pas comment le contourner :(

0 votes

String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant())); renvoie à ABCDEFGHIJKLMNOPQRSTUVWXYZ ;

17 votes

@CasperT : Probablement Enumerable.Range('a', 26)

64voto

Simon Points 11945
for (char letter = 'A'; letter <= 'Z'; letter++)
{
     Debug.WriteLine(letter);
}

50voto

Rezo Megrelidze Points 615
char[] alphabet = Enumerable.Range('A', 26).Select(x => (char)x).ToArray();

4 votes

Je pense que c'est la meilleure solution car vous pouvez utiliser cette méthode pour créer un tableau d'entiers et de lettres minuscules également. Ceci devrait être la réponse acceptée :)

0 votes

@PopCatalin avait la bonne réponse en premier, mais c'est l'approche que j'ai choisie. C'est un peu plus facile de suivre ce qui se passe, et la seule information qu'il suppose que vous connaissez est que l'alphabet contient 26 caractères ('A' .. 'Z'), ce qui me semble raisonnable.

22voto

Nyerguds Points 440

J'ai écrit ceci pour obtenir le code des colonnes MS Excel (A,B,C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) sur la base d'un index basé sur 1. (Bien sûr, passer à un indice basé sur zéro revient simplement à laisser de côté l'élément column--; au départ).

public static String getColumnNameFromIndex(int column)
{
    column--;
    String col = Convert.ToString((char)('A' + (column % 26)));
    while (column >= 26)
    {
        column = (column / 26) -1;
        col = Convert.ToString((char)('A' + (column % 26))) + col;
    }
    return col;
}

2 votes

Oh hey, je remplace juste Convert.ToString avec String.valueOf le fait fonctionner en Java :)

1 votes

Que pensez-vous de getIndexFromColumnName ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X