Gibt es eine einfache Möglichkeit, ein Array mit den Buchstaben des Alphabets in C # zu generieren? Es ist nicht allzu schwer, es von Hand zu machen, aber ich habe mich gefragt, ob es einen eingebauten Weg gibt, dies zu tun.
Es funktioniert auch mit anderen Alphabeten, solange Sie die Zeichenfolge in eine Ressource
Olmo
1
Dies ist der beste Weg, wenn Sie sicherstellen möchten, dass Ihr Code auf Computern mit verschiedenen Sprachen funktioniert. Andernfalls können Sie, wenn Sie Ihr Alphabet dynamisch generieren (wie andere Antworten unten), auf verschiedenen Computern mit einem anderen Alphabet enden.
Luis
Wie funktioniert das mit verschiedenen Sprachen? Wird dies auf magische Weise chinesische Buchstaben enthalten oder Buchstaben aus anderen Sprachen?
Paweł Audionysos
102
C # 3.0:
char[] az =Enumerable.Range('a','z'-'a'+1).Select(i =>(Char)i).ToArray();foreach(var c in az){Console.WriteLine(c);}
ja es funktioniert auch wenn die einzige Überladung von Enumerable.Range int Parameter akzeptiert ;-)
Dies funktioniert nicht für Sprachen mit Buchstaben, deren ASCII-Codes außerhalb des Bereichs 'a' - 'z' liegen. In solchen Fällen können Sie diese Methode nicht verwenden. Ansonsten schöne Lösung.
Michal B.
56
for(char letter ='A'; letter <='Z'; letter++){Debug.WriteLine(letter);}
Ich denke, dies ist die beste Lösung, da Sie diese Methode auch zum Erstellen eines Arrays von Ganzzahlen und Kleinbuchstaben verwenden können. Dies sollte die akzeptierte Antwort sein :)
Kapé
@ PopCatalin hatte zuerst die richtige Antwort, aber dies ist der Ansatz, den ich gewählt habe. Es ist ein bisschen einfacher zu verfolgen, was los ist, und die einzige Information, von der man annimmt, dass Sie wissen, dass das Alphabet 26 Zeichen ('A' .. 'Z') enthält, was ich für vernünftig halte.
Mass Dot Net
21
Ich habe dies geschrieben, um den MS Excel-Spaltencode (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) basierend auf einem 1-basierten Index zu erhalten. (Natürlich wird beim Umschalten auf Null einfach das column--;am Anfang weggelassen.)
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;}
Es ist besser, (int) 'A' zu verwenden, anstatt 65 fest zu codieren. Dadurch wird der Code besser lesbar und weniger fehleranfällig.
Mehrdad Afshari
In der führenden Codierung mit 'A'! = 65 (EBCDIC) sind A bis Z jedoch nicht sequenziell.
James Curran
5
Sieht für mich nicht nach einem Array aus.
Leichtigkeitsrennen im Orbit
@MehrdadAfshari Intern verwendete Codierung ist irrelevant. Was ist relevant ist , dass die Werte vom Typ Char Unicode - Codepunkte sind, und diejenigen , sind AZ sequentiell.
Nyerguds
8
Sie könnten so etwas tun, basierend auf den ASCII-Werten der Zeichen:
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}
(Siehe die Tabelle hier .) Sie wandeln nur vom int-Wert des Zeichens in den Zeichenwert um - dies funktioniert jedoch nur für ASCII-Zeichen, nicht für verschiedene Sprachen usw.
EDIT:
Wie von Mehrdad im Kommentar zu einer ähnlichen Lösung vorgeschlagen, ist es besser, dies zu tun:
alphabet[i]=(char)(i+(int)('A'));
Dies setzt das A-Zeichen auf seinen int-Wert und erhöht es dann basierend darauf, sodass es nicht fest codiert ist.
Dieser Code hat einen kleinen Fehler. i = 0 bis <27 enthält 27 Buchstaben (Array-Element 0, dann Elemente 1 bis 26).
Brian
Sie können es noch besser machen: Alphabet [i] = (char) (i + 'A'); Gleiches Ergebnis
CasperT
1
Sollte es nicht sein char[] alphabet = new char[26];?
Shishir Gupta
5
Beachten Sie auch, dass die Zeichenfolge einen Operator [] hat, der ein Zeichen zurückgibt, und ein ist IEnumerable<char>, sodass Sie für die meisten Zwecke eine Zeichenfolge als Zeichen [] verwenden können. Daher:
string alpha ="ABCDEFGHIJKLMNOPQRSTUVQXYZ";for(int i =0; i <26;++i){Console.WriteLine(alpha[i]);}foreach(char c in alpha){Console.WriteLine(c);}
Schön, aber das ist eine bizarre Art, eine forSchleife zu schreiben .
Nyerguds
@Nyerguds Wenn Sie das yield returnTeil meinen , ist es nicht wirklich gleichbedeutend mit einer for-Schleife. Es ist so, dass es verwendet werden könnte, um eine unendliche Reihe träge zurückzugeben.
Weston
Nein, ich meine die Tatsache, dass Sie whileeinen Zähler haben, der jede Runde erhöht und mit einem festen Wert endet. Genau das forsollte ersetzen.
Nyerguds
Ich verstehe was du meinst. Könnte dort eine for-Schleife verwenden. Es war vor 4 Jahren, so schwer zu erklären, warum ich es nicht getan habe!
Weston
2
var alphabets =Enumerable.Range('A',26).Select((num)=>((char)num).ToString()).ToList();
Anscheinend haben Sie nicht gelernt, wie man die richtigen Anführungszeichen für Zeichen verwendet. Es gibt keinen Grund, dies anhand eines Strings zu analysieren. Verwenden Sie einfach char alphaStart = 'A';einfache Anführungszeichen anstelle von doppelten Anführungszeichen.
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++;}
Antworten:
Ich glaube nicht, dass es einen eingebauten Weg gibt, aber ich denke, der einfachste wäre
quelle
C # 3.0:
ja es funktioniert auch wenn die einzige Überladung von Enumerable.Range int Parameter akzeptiert ;-)
quelle
String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));
kehrt zurückABCDEFGHIJKLMNOPQRSTUVWXYZ
;Enumerable.Range('a', 26)
quelle
quelle
Ich habe dies geschrieben, um den MS Excel-Spaltencode (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) basierend auf einem 1-basierten Index zu erhalten. (Natürlich wird beim Umschalten auf Null einfach das
column--;
am Anfang weggelassen.)quelle
Convert.ToString
durchString.valueOf
macht es in Java :)Angenommen, Sie meinen die Buchstaben des englischen Alphabets ...
quelle
Sie könnten so etwas tun, basierend auf den ASCII-Werten der Zeichen:
(Siehe die Tabelle hier .) Sie wandeln nur vom int-Wert des Zeichens in den Zeichenwert um - dies funktioniert jedoch nur für ASCII-Zeichen, nicht für verschiedene Sprachen usw.
EDIT: Wie von Mehrdad im Kommentar zu einer ähnlichen Lösung vorgeschlagen, ist es besser, dies zu tun:
Dies setzt das A-Zeichen auf seinen int-Wert und erhöht es dann basierend darauf, sodass es nicht fest codiert ist.
quelle
char[] alphabet = new char[26];
?Beachten Sie auch, dass die Zeichenfolge einen Operator [] hat, der ein Zeichen zurückgibt, und ein ist
IEnumerable<char>
, sodass Sie für die meisten Zwecke eine Zeichenfolge als Zeichen [] verwenden können. Daher:quelle
Überrascht hat niemand eine Ausbeutelösung vorgeschlagen:
Beispiel:
quelle
for
Schleife zu schreiben .yield return
Teil meinen , ist es nicht wirklich gleichbedeutend mit einer for-Schleife. Es ist so, dass es verwendet werden könnte, um eine unendliche Reihe träge zurückzugeben.while
einen Zähler haben, der jede Runde erhöht und mit einem festen Wert endet. Genau dasfor
sollte ersetzen.quelle
quelle
char alphaStart = 'A';
einfache Anführungszeichen anstelle von doppelten Anführungszeichen.quelle
if
undwhile
Anweisungen)4 Möglichkeiten, um das englische Alphabet in der Konsole zu erhalten:
quelle
Leider gibt es keinen gebrauchsfertigen Weg.
Sie können verwenden; char [] character = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .ToCharArray ();
quelle