Menghasilkan array huruf dalam alfabet


92

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.


FYI, pertanyaan ini sudah pernah ditanyakan sebelumnya dengan mempertimbangkan internasionalisasi.
Serge Wautier

7
Bukan hanya salah satu pertanyaan di mana saya bertanya-tanya apakah ada cara yang lebih baik. :)
Hel elephant


Kebalikannya dapat ditemukan di sini stackoverflow.com/a/667902/2343
Sameer Alibhai

Jawaban:


197

Saya tidak berpikir ada cara yang dibangun, tapi saya pikir yang termudah adalah

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

7
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 ;-)


'z' - 'a' + 1 = Kelihatannya sangat kikuk, tapi saya tidak bisa melihat jalan lain :(
CasperT

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

15
@CasperT: MungkinEnumerable.Range('a', 26)
abatishchev

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);
}

37
char[] alphabet = Enumerable.Range('A', 26).Select(x => (char)x).ToArray();

3
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.)

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
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();

9
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);
}

3

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);
}

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();

0
char alphaStart = Char.Parse("A");
char alphaEnd = Char.Parse("Z");
for(char i = alphaStart; i <= alphaEnd; i++) {
    string anchorLetter = i.ToString();
}

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,...

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++;
    }

pemformatan tetap, tetapi kode tampaknya tidak lengkap (lihat pernyataan ifdan while)
Oliver

1
Woah, rekursi untuk sesuatu yang sederhana? Anda dapat melakukannya dengan While sederhana, dan membaginya dengan 26.
Nyerguds

0

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()}");
    }
}

Meskipun ini adalah solusi, berikan lebih banyak informasi tentangnya dan apa fungsinya.
George Z.

0

Sayangnya tidak ada cara yang siap pakai.

Kamu bisa memakai; char [] karakter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .ToCharArray ();

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.