アルファベットの文字の配列を生成する


91

C#でアルファベットの文字を含む配列を生成する簡単な方法はありますか?手作業で行うことはそれほど難しくありませんが、これを行うための組み込みの方法があるかどうか疑問に思っていました。


ちなみに、この質問は以前に国際化を考慮して行われました。
Serge Wautier、2008年

7
いいえ、もっと良い方法があるかどうか疑問に思った質問の1つにすぎません。:)
2008年


回答:


193

組み込みの方法はないと思いますが、最も簡単な方法だと思います

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

7
リソースに文字列を配置する限り、それは他のアルファベットでも機能します:)
Olmo

1
これは、コードが異なる言語のマシンで確実に機能するようにする場合に最適な方法です。それ以外の場合(以下の他の回答のように)アルファベットを動的に生成する場合は、異なるマシンで異なるアルファベットで終了できます。
ルイス14

これはさまざまな言語でどのように機能しますか?これはどういうわけか魔法のようにチャインの文字を含んでいるのでしょうか、それとも他の言語の文字が含まれていますか?
パヴェル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);
}

はい、Enumerable.Rangeの唯一のオーバーロードがintパラメータを受け入れる場合でも機能します;-)


'z'-'a' + 1 =とても不格好に見えますが、
回避策

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

14
@CasperT:おそらくEnumerable.Range('a', 26)
abatishchev 2010

これは、ASCIIコードが 'a'〜 'z'の範囲外の文字を含む言語では機能しません。このような場合、この方法は使用できません。そうでなければ素晴らしい解決策。
Michal B.


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

3
この方法を使用して、整数と小文字の配列を作成することもできるので、これが最良の解決策だと思います。これが受け入れ答え:)でなければなりません
Kapé

最初は@PopCatalinが正解でしたが、これが私が使ったアプローチです。何が起こっているかをたどるのは少し簡単です。そして、あなたが知っていると仮定している唯一の情報は、アルファベットが26文字( 'A' .. 'Z')を含むということです。
Mass Dot Net

21

これは、1から始まるインデックスに基づいてMS Excel列コード(A、B、C、...、Z、AA、AB、...、ZZ、AAA、AABなど)を取得するために作成しました。(もちろん、ゼロベースへの切り替えcolumn--;は、最初はをオフにするだけです。)

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
ちょっとああ、ちょうど交換するConvert.ToStringString.valueOf、それはJavaで動作します:)
Nyerguds

1
getIndexFromColumnNameはどうですか?
oneiros '19

13

あなたが英語のアルファベットの文字を意味すると仮定すると...

    for ( int i = 0; i < 26; i++ )
    {
        Console.WriteLine( Convert.ToChar( i + 65 ) );
    }
    Console.WriteLine( "Press any key to continue." );
    Console.ReadKey();

9
65をハードコーディングする代わりに、(int) 'A'を使用することをお勧めします。これにより、コードが読みやすくなり、エラーが発生しにくくなります。
Mehrdad Afshari

ただし、 'A'!= 65(EBCDIC)である主要なエンコーディングでは、AからZは連続的ではありません。
James Curran、

5
私には配列のようには見えません。
オービットでの軽さのレース

@MehrdadAfshari内部で使用されるエンコードは無関係です。何関連することはChar型の値がUnicodeコードポイントであるということです、そしてそれらは、 AZのシーケンシャルです。
Nyerguds

8

文字のASCII値に基づいて、次のようにすることができます。

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
}

ここの表を参照してください。)文字のint値から文字値にキャストしているだけですが、これはASCII言語でのみ機能し、他の言語では機能しません。

編集:Mehrdadが同様のソリューションへのコメントで 提案したように、これを行うことをお勧めします:

alphabet[i] = (char)(i+(int)('A'));

これはA文字をそのint値にキャストし、これに基づいてインクリメントするため、ハードコードされていません。


このコードには小さなエラーがあります。i = 0〜<27には27文字が含まれます(配列要素0、次に要素1〜26)。
ブライアン、

あなたはそれをさらに良くすることができます:alphabet [i] =(char)(i + 'A'); 同じ結果
CasperT 2009

1
そうじゃないのchar[] alphabet = new char[26];
Shishir Gupta

5

また、文字列にはCharを返すoperator []がありIEnumerable<char>、なので、ほとんどの目的で、文字列をchar []として使用できます。したがって:

string alpha = "ABCDEFGHIJKLMNOPQRSTUVQXYZ";
for (int i =0; i < 26; ++i)
{  
     Console.WriteLine(alpha[i]);
}

foreach(char c in alpha)
{  
     Console.WriteLine(c);
}

3

驚いたことに、誰もイールドソリューションを提案していません。

public static IEnumerable<char> Alphabet()
{
    for (char letter = 'A'; letter <= 'Z'; letter++)
    {
        yield return letter;
    }
}

例:

foreach (var c in Alphabet())
{
    Console.Write(c);
}

いいですが、基本的にforループを書く奇妙な方法です。
Nyerguds

@Nyergudsは、yield returnパートを意味する場合、forループと実際には同等ではありません。無限のシリーズを遅延して返すために使用できるようなものです。
ウェストン

いいえ、私はあなたがwhile各ターンをインクリメントし、固定値で終了するカウンターを持っているという事実を意味します。それこそforが、交換用に設計されたものです。
Nyerguds 2016年

あなたの言っていることが分かります。そこでforループを使用できます。それは4年前でした、なぜ私がそうしなかったのか説明するのは難しいです!
ウェストン


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

charsの正しい引用符の使い方を学んでいないようです。文字列からそれを解析する理由はありません。char alphaStart = 'A';二重引用符の代わりに一重引用符を使用します。
Nyerguds 2013年

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

書式は修正されましたが、コードが不完全なようです(ifand whileステートメント
Oliver

1
ああ、単純なものの再帰?あなたは、単純なながらにそれを行う、と26で割ることができます
Nyerguds

0

コンソールで英語のアルファベットを取得する4つの方法:

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

これが解決策である場合でも、それについての詳細とそれが何をするかを提供してください。
ジョージZ.19年

0

残念ながら、すぐに使える方法はありません。

使用できます。char []文字= "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .ToCharArray();

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.