2020年10月06日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 5649 count

【入門級】AからZまでの文字列を生成する

Written By: 川俣 晶連絡先

AからZまでの26文字を含む文字列を生成する §

 AからZまでの26文字を含む文字列が欲しいとします。

 しかし、var atoz1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";のようなコードは書きたくないとします。こういうことをすると間違いが入りやすいからです。

 どうすれば良いのでしょうか?

 C#の文字コードはUnicodeです。Unicodeの文字番号はAからZまで全て昇順で並んでいます。ですから、'A'の番号から1ずつ26回足していけば欲しい文字は全て揃います。

 それらの文字を1つ1つ足していけば必要な文字列が得られます。

 しかし、サンプルソースの【まわりくどい】例のようにforループをまわしていたらソースは無駄に長くなってしまいます。

 そこでLINQを使って、Rangeメソッドで26個の数字を生成させています。それを更に加工して文字列に直せば目的達成です。

 注意点は、数字(int)を文字(char)に直すことです。intのままだと数値扱いです。 サンプルソースのNGパターンのように文字ではなく文字の番号が出てしまいます。

罠の数々 §

  • Select(c=>(char)c)の代わりにCast<char>()と書くことはできない。Castメソッドは全てを型をキャストできるわけではない。

参考リンク §

Enumerable.Range(Int32, Int32) メソッド

String.Concat メソッド

Enumerable.Select メソッド

 なぜint型からchar型への変換が必要なのだろうか。最初からchar型でカウントすれば良いのではないだろうか。上記リンクからRangeの定義を確認し、変換が必要とされる理由を考えてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

AtoZ §

using System;

using System.Linq;

using System.Text;

class Program

{

    static void Main()

    {

        // こうは書きたくない

        var atoz1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        Console.WriteLine(atoz1);

        // まわりくどい

        var sb = new StringBuilder();

        for (int i = 0; i < 26; i++)

        {

            sb.Append((char)(i + 'A'));

        }

        var atoz2 = sb.ToString();

        Console.WriteLine(atoz2);

        // LINQ使用

        var atoz3 = string.Concat(Enumerable.Range('A', 26).Select(c => (char)c));

        Console.WriteLine(atoz3);

        // NG

        var ng = string.Concat(Enumerable.Range('A', 26));

        Console.WriteLine(ng);

    }

}

実行結果

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

6566676869707172737475767778798081828384858687888990

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
10月
07日
【入門級】3つの値の最大値を得る方法
3days 0 count
total 5624 count
【C# コーディング How To】の前のコンテンツ
2020年
10月
05日
【入門級】非同期のハロー・ワールド
3days 0 count
total 1073 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20201006084559
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.