Apakah ada cara mudah untuk menghasilkan array yang berisi huruf-huruf alfabet di C #? Tidak terlalu sulit untuk melakukannya dengan tangan, tetapi saya bertanya-tanya apakah ada cara yang dibangun untuk melakukan ini.
Ini juga berfungsi pada alfabet lain, selama Anda menempatkan string di Resource :)
Olmo
1
Ini adalah cara terbaik jika Anda ingin memastikan bahwa kode Anda berfungsi pada mesin dengan bahasa berbeda. Jika tidak, jika Anda membuat alfabet Anda secara dinamis (seperti jawaban lain di bawah), Anda dapat mengakhiri dengan alfabet yang berbeda di mesin yang berbeda.
Luis
Bagaimana cara kerjanya dengan bahasa yang berbeda? Akankah ini entah bagaimana secara ajaib berisi huruf Cina, atau huruf dari bahasa lain?
Paweł Audionysos
104
C # 3.0:
char[] az = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToArray();
foreach (var c in az)
{
Console.WriteLine(c);
}
ya itu berhasil bahkan jika satu-satunya kelebihan Enumerable.Range menerima parameter int ;-)
Ini tidak akan berfungsi untuk bahasa yang memiliki huruf yang kode ASCII-nya berada di luar rentang 'a' - 'z'. Anda tidak dapat menggunakan metode ini dalam kasus seperti itu. Solusi bagus sebaliknya.
Michal B.
58
for (char letter = 'A'; letter <= 'Z'; letter++)
{
Debug.WriteLine(letter);
}
Saya rasa ini adalah solusi terbaik karena Anda dapat menggunakan metode ini untuk membuat array bilangan bulat dan huruf kecil juga. Ini harus menjadi jawaban yang diterima :)
Kapé
@PopCatalin memiliki jawaban yang benar terlebih dahulu, tetapi ini adalah pendekatan yang saya gunakan. Agak lebih mudah untuk mengikuti apa yang sedang terjadi, dan satu-satunya informasi yang diasumsikan Anda tahu adalah bahwa alfabet berisi 26 karakter ('A' .. 'Z'), yang menurut saya masuk akal.
Mass Dot Net
22
Saya menulis ini untuk mendapatkan kode kolom MS excel (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) berdasarkan indeks berbasis 1. (Tentu saja, beralih ke berbasis nol hanya berhenti column--;di awal.)
Oh hey, hanya mengganti Convert.ToStringdengan String.valueOfmembuatnya berfungsi di Java :)
Nyerguds
1
Bagaimana dengan getIndexFromColumnName?
oneiros
14
Dengan asumsi yang Anda maksud adalah huruf-huruf alfabet bahasa Inggris ...
for ( int i = 0; i < 26; i++ )
{
Console.WriteLine( Convert.ToChar( i + 65 ) );
}
Console.WriteLine( "Press any key to continue." );
Console.ReadKey();
Lebih baik menggunakan (int) 'A' daripada hardcode 65. Ini akan membuat kode lebih mudah dibaca dan tidak terlalu rentan terhadap kesalahan.
Mehrdad Afshari
Namun, dalam pengkodean utama di mana 'A'! = 65, (EBCDIC), A ke Z tidak berurutan.
James Curran
5
Tidak terlihat seperti array bagi saya.
Balapan Lightness di Orbit
@MehrdadAfshari Pengkodean yang digunakan secara internal tidak relevan. Apa yang relevan adalah bahwa nilai-nilai dari jenis Char adalah kode Unicode poin, dan orang-orang yang AZ berurutan.
Nyerguds
8
Anda bisa melakukan sesuatu seperti ini, berdasarkan nilai ascii dari karakter:
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
}
(Lihat tabel di sini .) Anda baru saja mentransmisikan dari nilai int karakter ke nilai karakter - tetapi, itu hanya berfungsi untuk karakter ascii bukan bahasa yang berbeda, dll.
EDIT:
Seperti yang disarankan oleh Mehrdad di komentar untuk solusi serupa, lebih baik melakukan ini:
alphabet[i] = (char)(i+(int)('A'));
Ini mentransmisikan karakter A ke nilai intnya dan kemudian meningkatkannya berdasarkan ini, jadi tidak di-hardcode.
Kode ini memiliki kesalahan kecil. i = 0 hingga <27 menyertakan 27 huruf (elemen array 0, lalu elemen 1 hingga 26).
Brian
Anda dapat membuatnya lebih baik: alfabet [i] = (char) (i + 'A'); Hasil yang sama
CasperT
1
Bukankah seharusnya begitu char[] alphabet = new char[26];?
Shishir Gupta
5
Perhatikan juga, string memiliki operator [] yang mengembalikan Char, dan merupakan IEnumerable<char>, jadi untuk sebagian besar tujuan, Anda dapat menggunakan string sebagai char []. Karenanya:
string alpha = "ABCDEFGHIJKLMNOPQRSTUVQXYZ";
for (int i =0; i < 26; ++i)
{
Console.WriteLine(alpha[i]);
}
foreach(char c in alpha)
{
Console.WriteLine(c);
}
Bagus, tapi itu cara yang aneh untuk menulis satu forlingkaran.
Nyerguds
@Nyerguds jika yang Anda maksud adalah yield returnbagian, itu tidak benar-benar setara dengan for loop. Ini sedemikian rupa sehingga dapat digunakan untuk mengembalikan deret tak hingga dengan malas.
barat
Tidak, maksud saya fakta Anda memiliki whilepenghitung yang menaikkan setiap belokan dan berakhir pada nilai tetap. Itulah tepatnyafor dirancang untuk diganti.
Nyerguds
Saya mengerti apa yang kamu maksud. Bisa menggunakan for loop di sana. Itu 4 tahun yang lalu, sangat sulit untuk menjelaskan mengapa saya tidak melakukannya!
barat
2
var alphabets = Enumerable.Range('A', 26).Select((num) => ((char)num).ToString()).ToList();
Sepertinya Anda belum belajar bagaimana menggunakan kutipan yang benar untuk karakter. Tidak ada alasan untuk menguraikannya dari string; gunakan saja char alphaStart = 'A';, dengan tanda kutip tunggal, bukan tanda kutip ganda.
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)
{
int TempCount = 0;
string returnCharCount = string.Empty;
if (colCount <= 25)
{
TempCount = colCount;
char CharCount = 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 <>
{
string CharCount = string.Empty;
CharCount = CharacterIncrement(i);
i++;
}
Jawaban:
Saya tidak berpikir ada cara yang dibangun, tapi saya pikir yang termudah adalah
char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
sumber
C # 3.0:
char[] az = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToArray(); foreach (var c in az) { Console.WriteLine(c); }
ya itu berhasil bahkan jika satu-satunya kelebihan Enumerable.Range menerima parameter int ;-)
sumber
String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));
kembaliABCDEFGHIJKLMNOPQRSTUVWXYZ
;Enumerable.Range('a', 26)
for (char letter = 'A'; letter <= 'Z'; letter++) { Debug.WriteLine(letter); }
sumber
char[] alphabet = Enumerable.Range('A', 26).Select(x => (char)x).ToArray();
sumber
Saya menulis ini untuk mendapatkan kode kolom MS excel (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) berdasarkan indeks berbasis 1. (Tentu saja, beralih ke berbasis nol hanya berhenti
column--;
di awal.)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; }
sumber
Convert.ToString
denganString.valueOf
membuatnya berfungsi di Java :)Dengan asumsi yang Anda maksud adalah huruf-huruf alfabet bahasa Inggris ...
for ( int i = 0; i < 26; i++ ) { Console.WriteLine( Convert.ToChar( i + 65 ) ); } Console.WriteLine( "Press any key to continue." ); Console.ReadKey();
sumber
Anda bisa melakukan sesuatu seperti ini, berdasarkan nilai ascii dari karakter:
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 }
(Lihat tabel di sini .) Anda baru saja mentransmisikan dari nilai int karakter ke nilai karakter - tetapi, itu hanya berfungsi untuk karakter ascii bukan bahasa yang berbeda, dll.
EDIT: Seperti yang disarankan oleh Mehrdad di komentar untuk solusi serupa, lebih baik melakukan ini:
alphabet[i] = (char)(i+(int)('A'));
Ini mentransmisikan karakter A ke nilai intnya dan kemudian meningkatkannya berdasarkan ini, jadi tidak di-hardcode.
sumber
char[] alphabet = new char[26];
?Perhatikan juga, string memiliki operator [] yang mengembalikan Char, dan merupakan
IEnumerable<char>
, jadi untuk sebagian besar tujuan, Anda dapat menggunakan string sebagai char []. Karenanya:string alpha = "ABCDEFGHIJKLMNOPQRSTUVQXYZ"; for (int i =0; i < 26; ++i) { Console.WriteLine(alpha[i]); } foreach(char c in alpha) { Console.WriteLine(c); }
sumber
Terkejut tidak ada yang menyarankan solusi hasil:
public static IEnumerable<char> Alphabet() { for (char letter = 'A'; letter <= 'Z'; letter++) { yield return letter; } }
Contoh:
foreach (var c in Alphabet()) { Console.Write(c); }
sumber
for
lingkaran.yield return
bagian, itu tidak benar-benar setara dengan for loop. Ini sedemikian rupa sehingga dapat digunakan untuk mengembalikan deret tak hingga dengan malas.while
penghitung yang menaikkan setiap belokan dan berakhir pada nilai tetap. Itulah tepatnyafor
dirancang untuk diganti.var alphabets = Enumerable.Range('A', 26).Select((num) => ((char)num).ToString()).ToList();
sumber
char alphaStart = Char.Parse("A"); char alphaEnd = Char.Parse("Z"); for(char i = alphaStart; i <= alphaEnd; i++) { string anchorLetter = i.ToString(); }
sumber
char alphaStart = 'A';
, dengan tanda kutip tunggal, bukan tanda kutip ganda.//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,... static string CharacterIncrement(int colCount) { int TempCount = 0; string returnCharCount = string.Empty; if (colCount <= 25) { TempCount = colCount; char CharCount = 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 <> { string CharCount = string.Empty; CharCount = CharacterIncrement(i); i++; }
sumber
if
danwhile
)4 cara mendapatkan alfabet Inggris di Konsol:
public void ShowEnglishAlphabet() { var firstLetter = 'a'; var endLetter = 'z'; for (var letter = firstLetter; letter <= endLetter; letter++) { Console.WriteLine($"{letter}-{letter.ToString().ToUpper()}"); } } public void ShowEnglishAlphabetFromUnicodeTableDecNumber() { var firstLetter = 97; var endLetter = 122; for (var letterNumberUnicodeTable = firstLetter; letterNumberUnicodeTable <= endLetter; letterNumberUnicodeTable++) { Console.WriteLine($"{(char)letterNumberUnicodeTable}- {((char)letterNumberUnicodeTable).ToString().ToUpper()}"); } } public void ShowEnglishAlphabetUnicodeTableEscapeSequence() { var firstLetter = '\u0061'; var endLetter = '\u007A'; for (var letterNumberUnicodeTable = firstLetter; letterNumberUnicodeTable <= endLetter; letterNumberUnicodeTable++) { Console.WriteLine($"{letterNumberUnicodeTable}- {letterNumberUnicodeTable.ToString().ToUpper()}"); } } public void ShowEnglishAlphabetUnicodeTableLinq() { var alphabets = Enumerable.Range('a', 26).Select(letter => ((char)letter).ToString()).ToList(); foreach (var letter in alphabets) { Console.WriteLine($"{letter}-{letter.ToUpper()}"); } }
sumber
Sayangnya tidak ada cara yang siap pakai.
Kamu bisa memakai; char [] karakter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .ToCharArray ();
sumber