Existe-t-il un moyen simple de générer un tableau contenant les lettres de l'alphabet en C #? Ce n'est pas trop difficile de le faire à la main, mais je me demandais s'il y avait un moyen intégré de le faire.
Cela fonctionne également sur d'autres alphabets, tant que vous placez la chaîne dans une ressource :)
Olmo
1
C'est le meilleur moyen si vous voulez vous assurer que votre code fonctionne sur des machines avec des langues différentes. Sinon, si vous générez votre alphabet dynamiquement (comme d'autres réponses ci-dessous), vous pouvez terminer avec un alphabet différent sur différentes machines.
Luis
Comment cela fonctionne avec différentes langues? Est-ce que cela contiendra comme par magie des lettres chinoises, ou des lettres d'autres langues?
Paweł Audionysos
103
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 ça marche même si la seule surcharge d'Enumerable.Range accepte les paramètres int ;-)
Cela ne fonctionnera pas pour les langues qui ont des lettres dont les codes ASCII sont en dehors de la plage «a» - «z». Vous ne pouvez pas utiliser cette méthode dans de tels cas. Belle solution sinon.
Michal B.
57
for(char letter ='A'; letter <='Z'; letter++){Debug.WriteLine(letter);}
Je pense que c'est la meilleure solution car vous pouvez également utiliser cette méthode pour créer un tableau d'entiers et de lettres minuscules. Cela devrait être la réponse acceptée :)
Kapé
@PopCatalin avait d'abord la bonne réponse, mais c'est l'approche que j'ai choisie. Il est un peu plus facile de suivre ce qui se passe, et la seule information qu'il suppose que vous sachiez est que l'alphabet contient 26 caractères («A» .. «Z»), ce qui, à mon avis, est raisonnable.
Mass Dot Net
21
J'ai écrit ceci pour obtenir le code de colonne MS Excel (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) basé sur un index basé sur 1. (Bien sûr, passer à la base zéro revient simplement à laisser le column--;au début.)
publicstaticString 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;}
Il vaut mieux utiliser (int) 'A' au lieu du hardcoding 65. Cela rendra le code plus lisible et moins sujet aux erreurs.
Mehrdad Afshari
Cependant, dans l'encodage principal où «A»! = 65, (EBCDIC), A à Z ne sont pas séquentiels.
James Curran
5
Cela ne me ressemble pas à un tableau.
Courses de légèreté en orbite
@MehrdadAfshari Le codage utilisé en interne n'est pas pertinent. Ce qui est pertinent, c'est que les valeurs de type Char sont des points de code Unicode, et celles-ci sont séquentielles AZ.
Nyerguds
8
Vous pouvez faire quelque chose comme ceci, basé sur les valeurs ascii des caractères:
char[26] alphabet;for(int i =0; i <26; i++){
alphabet[i]=(char)(i+65);//65 is the offset for capital A in the ascaii table}
(Voir le tableau ici .) Vous effectuez simplement un transtypage de la valeur int du caractère à la valeur du caractère - mais cela ne fonctionne que pour les caractères ascii et non dans des langues différentes, etc.
EDIT:
Comme suggéré par Mehrdad dans le commentaire d'une solution similaire, il vaut mieux faire ceci:
alphabet[i]=(char)(i+(int)('A'));
Cela convertit le caractère A à sa valeur int, puis incrémente en fonction de cela, il n'est donc pas codé en dur.
Ce code a une erreur mineure. i = 0 à <27 comprend 27 lettres (élément de tableau 0, puis éléments 1 à 26).
Brian
Vous pouvez le rendre encore meilleur: alphabet [i] = (char) (i + 'A'); Même résultat
CasperT
1
Ne devrait-il pas l'être char[] alphabet = new char[26];?
Shishir Gupta
5
Notez également que la chaîne a un opérateur [] qui renvoie un Char, et est donc un IEnumerable<char>, donc dans la plupart des cas, vous pouvez utiliser une chaîne comme char []. Par conséquent:
string alpha ="ABCDEFGHIJKLMNOPQRSTUVQXYZ";for(int i =0; i <26;++i){Console.WriteLine(alpha[i]);}foreach(char c in alpha){Console.WriteLine(c);}
Bien, mais c'est une façon bizarre d'écrire une forboucle.
Nyerguds
@Nyerguds si vous voulez dire la yield returnpartie, ce n'est pas vraiment équivalent à une boucle for. Il est tel qu'il pourrait être utilisé pour renvoyer paresseusement une série infinie.
weston
Non, je veux dire le fait que vous ayez un whileavec un compteur qui incrémente à chaque tour et se termine sur une valeur fixe. C'est exactement ce qui a forété conçu pour remplacer.
Nyerguds
Je vois ce que tu veux dire. Pourrait utiliser une boucle for là-bas. C'était il y a 4 ans, tellement difficile d'expliquer pourquoi je ne l'ai pas fait!
weston
2
var alphabets =Enumerable.Range('A',26).Select((num)=>((char)num).ToString()).ToList();
Il semble que vous n'ayez pas appris à utiliser les guillemets corrects pour les caractères. Il n'y a aucune raison d'analyser cela à partir de la chaîne; utilisez simplement char alphaStart = 'A';, avec des guillemets simples au lieu de guillemets doubles.
Nyerguds
0
//generate a list of alphabet using csharp//this recurcive function will return you//a string with position of passed int//say if pass 0 will return A ,1-B,2-C,.....,26-AA,27-AB,....,701-ZZ,702-AAA,703-AAB,...staticstringCharacterIncrement(int colCount){intTempCount=0;string returnCharCount =string.Empty;if(colCount <=25){TempCount= colCount;charCharCount=Convert.ToChar((Convert.ToInt32('A')+TempCount));
returnCharCount +=CharCount;return returnCharCount;}else{var rev =0;while(colCount >=26){
colCount = colCount -26;
rev++;}
returnCharCount +=CharacterIncrement(rev-1);
returnCharCount +=CharacterIncrement(colCount);return returnCharCount;}}//--------this loop call this function---------//int i =0;while(i <>{stringCharCount=string.Empty;CharCount=CharacterIncrement(i);
i++;}
Réponses:
Je ne pense pas qu'il y ait un moyen intégré, mais je pense que le plus simple serait
la source
C # 3.0:
oui ça marche même si la seule surcharge d'Enumerable.Range accepte les paramètres int ;-)
la source
String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));
retourneABCDEFGHIJKLMNOPQRSTUVWXYZ
;Enumerable.Range('a', 26)
la source
la source
J'ai écrit ceci pour obtenir le code de colonne MS Excel (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) basé sur un index basé sur 1. (Bien sûr, passer à la base zéro revient simplement à laisser le
column--;
au début.)la source
Convert.ToString
par leString.valueOf
fait fonctionner en Java :)En supposant que vous vouliez dire les lettres de l'alphabet anglais ...
la source
Vous pouvez faire quelque chose comme ceci, basé sur les valeurs ascii des caractères:
(Voir le tableau ici .) Vous effectuez simplement un transtypage de la valeur int du caractère à la valeur du caractère - mais cela ne fonctionne que pour les caractères ascii et non dans des langues différentes, etc.
EDIT: Comme suggéré par Mehrdad dans le commentaire d'une solution similaire, il vaut mieux faire ceci:
Cela convertit le caractère A à sa valeur int, puis incrémente en fonction de cela, il n'est donc pas codé en dur.
la source
char[] alphabet = new char[26];
?Notez également que la chaîne a un opérateur [] qui renvoie un Char, et est donc un
IEnumerable<char>
, donc dans la plupart des cas, vous pouvez utiliser une chaîne comme char []. Par conséquent:la source
Surpris, personne n'a suggéré une solution de rendement:
Exemple:
la source
for
boucle.yield return
partie, ce n'est pas vraiment équivalent à une boucle for. Il est tel qu'il pourrait être utilisé pour renvoyer paresseusement une série infinie.while
avec un compteur qui incrémente à chaque tour et se termine sur une valeur fixe. C'est exactement ce qui afor
été conçu pour remplacer.la source
la source
char alphaStart = 'A';
, avec des guillemets simples au lieu de guillemets doubles.la source
if
etwhile
)4 façons d'obtenir l'alphabet anglais dans la console:
la source
Malheureusement, il n'y a pas de moyen prêt à l'emploi.
Vous pouvez utiliser; char [] characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .ToCharArray ();
la source