アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2018年07月04日

【026】List(その2)


 List(その2)

 最初に、収容可能要素数を 20 として List<int> list を作成していますが、
もちろん、後で変更することは可能です。
   List<int> list = new List<int>(20);

 下記プログラムでは、
  Reverseメソッドによる要素の並びの反転
  Sortメソッドによる要素のソート
を行っています。

以下はプログラムです。

using System;
using System.Collections.Generic;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
// 収容可能要素数 20 の List<int> list を作成
List<int> list = new List<int>(20);

// 10個の要素を Add
for (var i = 0; i < 10; i++)
list.Add(20 - i);


Console.WriteLine($"収容可能要素数 : {list.Capacity}");
Console.WriteLine($"現時点の大きさ : {list.Count}");

Console.WriteLine($"\nlist の要素の並び");
foreach (var x in list)
Console.Write($"{x} ");

Console.WriteLine($"\n\nlist[0]〜list[4] の要素の並びを反転");
list.Reverse(0, 5);
foreach (var x in list)
Console.Write($"{x} ");

Console.WriteLine($"\n\n全要素を昇順にソート");
list.Sort();
foreach (var x in list)
Console.Write($"{x} ");
Console.WriteLine();
}
}
}

cs_b0058.png


2018年06月27日

【025】List(その1)


 List(その1)

 List はオブジェクトの集合を格納します。配列に似ていますが、サイズ変更が可能であることなど、機能的に、より優れているといえます。

 string型のオブジェクトを格納する List は、例えば、次のようにして作成します。
   var list1 = new List<string>();
   list1.Add("日本"); list1.Add("アメリカ"); list1.ADD("チリ");

   var list2 = new List<string> {"コンゴ", "パナマ", "インド"};

   string[] data = {"台湾", "ベトナム", "エルサルバドル"};
   var list3 = new List<string>(data);


以下はプログラムです。

using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var list1 = new List<string>();
list1.Add("日本"); list1.Add("アメリカ"); list1.Add("チリ");

var list2 = new List<string> { "コンゴ", "パナマ", "インド" };

string[] data = { "台湾", "ベトナム", "エルサルバドル" };
var list3 = new List<string>(data);

foreach (var str in list1)
{
Console.Write(str + ' ');
}
Console.WriteLine();

foreach (var str in list2)
{
Console.Write(str + ' ');
}
Console.WriteLine();

foreach (var str in list3)
{
Console.Write(str + ' ');
}
Console.WriteLine();
}
}
}

cs_b0057.png


【024】日時表示の書式指定


 日時表示の書式指定

 前回【023】のプログラムでは、書式指定子 "F" を使いました。
   Console.WriteLine(
     date.ToString("F", new CultureInfo("ja-JP"))
   );


 様々な書式指定子がありますが、そのうちのいくつかを下記のプログラムで使用してみました。

以下はプログラムです。

using System;
using System.Globalization;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 現在日時を取得します。
var date = DateTime.Now;

Console.WriteLine(
date.ToString("F", new CultureInfo("ja-JP"))
);

Console.WriteLine(
date.ToString("f", new CultureInfo("ja-JP"))
);

Console.WriteLine(
date.ToString("G", new CultureInfo("ja-JP"))
);

Console.WriteLine(
date.ToString("g", new CultureInfo("ja-JP"))
);

Console.WriteLine(
date.ToString("yyyy年MM月dd日tthh時mm分ss秒")
);

Console.WriteLine(
date.ToString("yyyy年MM月dd日HH時mm分ss秒")
);
}
}
}

cs_b0056.png


2018年06月05日

【023】CultureInfoクラス と ロケールID


 CultureInfoクラスロケールID

 CultureInfoクラス
  このクラスは、国・地域における、日時書式・数値書式を含む様々な表記法、暦、等の情報を提供します。

 ロケールID (LCID)
  国・地域を表す ID です。

 下記のプログラムでは、ロケールID を引数にして CultureInfoオブジェクトを作成しています。
そして、ToStringメソッドに、日時表記の指定子"F" と 作成した CultureInfoオブジェクトを渡すことで、カルチャーごとの日時表記を実現しています。

以下はプログラムです。

using System;
using System.Globalization;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
// 現在日時を取得します。
var date = DateTime.Now;

// 日本語(日本)
Console.WriteLine(
date.ToString("F", new CultureInfo("ja-JP"))
);

// マレー語(マレーシア)
Console.WriteLine(
date.ToString("F", new CultureInfo("ms"))
);

// スペイン語 (スペイン)
Console.WriteLine(
date.ToString("F", new CultureInfo("es-ES"))
);

// ドイツ語 (ドイツ)
Console.WriteLine(
date.ToString("F", new CultureInfo("de"))
);

// ハンガリー語 (ハンガリー)
Console.WriteLine(
date.ToString("F", new CultureInfo("hu-HU"))
);

// 英語 (アメリカ)
Console.WriteLine(
date.ToString("F", new CultureInfo("en-US"))
);

// 英語 (イギリス)
Console.WriteLine(
date.ToString("F", new CultureInfo("en-GB"))
);

// 英語 (南アフリカ)
Console.WriteLine(
date.ToString("F", new CultureInfo("en-ZA"))
);
}
}
}

cs_b0055_2.png


2018年06月04日

【022】DateTimeオブジェクトが保持する日時の表示


DateTimeオブジェクトが保持する日時の表示

 日時表示の書式は数多くありますが、利用されることが多いと思われる書式の指定方法のいくつかを、下記のプログラムで確認しています。

ToLongDateStringメソッド
  長い書式の日付を取得します。

ToLongTimeStringメソッド
  長い書式の時刻を取得します。

ToStringメソッド
  書式指定子を用いて日時の書式を決定します。
  下記のプログラムでは、以下の書式指定子を使っています。
 yyyy 4桁の西暦年
 MM 月(01, 02, ・・・・・・, 12)
 dd 日(01, 02, ・・・・・・, 31)
 ddd 曜日(日, 月, ・・・, 土)
 HH 時(00, 01, 02, ・・・・・・, 23) 
 mm 分(00, 01, 02, ・・・・・・, 59) 
 ss 秒(00, 01, 02, ・・・・・・, 59)

以下はプログラムです。

using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
// 現在日時を取得します。
var date = DateTime.Now;

// 日時をデフォルトの書式で表示します。
Console.WriteLine(date);

// ToLongDateStringメソッド、ToLongTimeStringメソッド
// を用いて書式指定します。

Console.WriteLine(date.ToLongDateString() + ' '
+ date.ToLongTimeString());

// ToStringメソッドを用いて書式指定します。
Console.WriteLine(
date.ToString("yyyy年MM月dd日(ddd) HH時mm分ss秒")
);
}
}
}

cs_b0054.png



2018年06月03日

【021】DateTime構造体


 DateTime構造体

 コンストラクタの例
  ・DateTime(Int32, Int32, Int32)
    指定された年月日に初期化したインスタンスを生成します。
  ・DateTime(Int32, Int32, Int32, Int32, Int32, Int32)
    指定された年月日時分秒に初期化したインスタンスを生成します。

 プロパティの例
  ・Date
    日付
  ・Year
    年
  ・Month
    月
  ・Day
    月の日付
  ・DayOfWeek
    曜日
  ・Hour
    時
  ・Minute
    分
  ・Second
    秒
  ・Millisecond
    ミリ秒
  ・DayOfYear
    年初からの日数
  ・Now
    コンピューター上の現在日時
  ・Today
    現在の日付


using System;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var d1 = new DateTime(2100, 12, 31, 23, 59, 59);
Console.WriteLine(d1.GetType().FullName);
Console.WriteLine(d1);
Console.WriteLine(d1.DayOfWeek);

// ------------

Console.WriteLine("\n現在日時");
var d2 = DateTime.Now;

// Nowプロパティの返却値は DateTime型です。
Console.WriteLine(d2.GetType().FullName);
Console.WriteLine(d2);
Console.WriteLine(
$"年初から数えて、第{d2.DayOfYear}日目です"
);
}
}
}

cs_b0053.png



【020】Splitメソッドによる文字列の分割


 Splitメソッドによる文字列の分割

 String.Split メソッドは指定された区切り文字で文字列を分割し、分割した各要素を配列に収納します。
複数の区切り文字を指定することも可能です(下記のプログラムをご参照ください)。


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var str1 = "あい,うえ,おか,きく,けこ";

// 区切り文字 ',' の指定
String[] arr1 = str1.Split(',');

foreach (var x in arr1)
{
Console.Write($" {x}");
}
Console.WriteLine();

// ------------

var str2 = "ABCDabcdPQRSpqrs123";

// 複数の区切り文字 'D', 'd', 'S', 's' の指定
String[] arr2 = str2.Split('D', 'd', 'S', 's');

foreach (var x in arr2)
{
Console.Write($" {x}");
}
Console.WriteLine();
}
}
}

cs_b0052.png



【019】逐語的文字列リテラル


 逐語的文字列リテラル

 \n, \", \a, \\ 等をエスケープシーケンスと見なさず、書かれているままの文字列として解釈します。
 (エスケープシーケンスとは、制御コード「\」と文字を組み合わせた記法で、通常の文字列で表すことのできない機能や文字を表す手段です。)

 例えば、
  「C:\Program Files\Notepad++\notepad++.exe」
を画面上に出力させる場合には、エスケープシーケンスを使って、
   Console.WriteLine("C:\\Program Files\\Notepad++\\notepad++.exe")
のように記述しますが、
逐語的文字列リテラルを利用すると、
   Console.WriteLine(@"C:\Program Files\Notepad++\notepad++.exe")
と、制御コード「\」を使わずに記述できるようになります。

 文字列を、逐語的文字列リテラルで表現する場合には、先頭に「@」を付けます

下記のプログラムは、Windowsのパスを表す文字列から、末尾の拡張子を抜き出しています。


using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var str = @"C:\Program Files\Notepad++\notepad++.exe";

// str.LastIndexOf(".") + 1
// 最後の"."の位置に 1 を加えた位置
// str.Substring(str.LastIndexOf(".") + 1)
// 最後の"."の位置に 1 を加えた位置以降の部分文字列

Console.WriteLine(str.Substring(str.LastIndexOf(".") + 1));
}
}
}

cs_b0051.png



2018年05月16日

【018】文字型 と 1文字の文字列型


 文字型 と 1文字の文字列型

 下記のプログラムの説明です。

(1)
 文字型配列(Char[]型) c を作ります。
    Char[] c = new Char[] { 'あ', 'い', 'う' };

 foreach文で1文字ずつ取り出しています。
    foreach (Char val in c)
    {
      Console.Write($"{val} ");
    }

(2)
 文字列型(String型)のコンストラクタに引数として c を渡し、文字列 s を作っています。
    String s = new String(c) + "えお"; (ついでに、"えお" を加えました。)

 foreach文で1文字ずつ取り出す場合は、Char型文字として取り出すことになります(String型で取り出そうとするとエラーになります)。
    foreach (Char val in s)
    {
      Console.Write($"{val} ");
    }

 for文で、s[i] を使って1文字ずつ取り出すこともできますが、
    for(var i = 0; i < s.Length; i++)
    {
      Console.Write($"{s[i]} ");
    }
この場合でも、
    Console.WriteLine(s[0].GetType().FullName);
として 型を調べると Char型です。

(3)
 上の結果から、1文字の場合は必ずChar型になってしまうような気がしますが、
    String s1 = "あ";
    Console.WriteLine(s1.GetType().FullName);
の結果は String となるので、この場合は、1文字でも文字列型であることがわかります。

(4)
 文字型の1文字を、文字列型に変換しています。
    Char c1 = 'さ';
    String s2 = c1.ToString();

 1文字の文字列型を、文字型に変換しています。
    Char c2 = s2[0];


using System;

namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
// (1) 文字型の配列
Char[] c = new Char[] { 'あ', 'い', 'う' };
Console.WriteLine(c);
Console.WriteLine(c.GetType().FullName);

foreach (Char val in c)
{
Console.Write($"{val} ");
}
Console.Write("\n\n");


// (2) 文字列型
String s = new String(c) + "えお";
Console.WriteLine(s);
Console.WriteLine(s.GetType().FullName);

foreach (Char val in s)
{
Console.Write($"{val} ");
}
Console.WriteLine();

for (var i = 0; i < s.Length; i++)
{
Console.Write($"{s[i]} ");
}
Console.WriteLine();
Console.WriteLine(s[0].GetType().FullName);
Console.WriteLine();

// (3)
String s1 = "あ";
Console.WriteLine(s1.GetType().FullName);
Console.WriteLine();

// (4)
Char c1 = 'さ';
String s2 = c1.ToString();
Console.WriteLine(s2.GetType().FullName);
Char c2 = s2[0];
Console.WriteLine(c2.GetType().FullName);
}
}
}

cs_b0041.png



2018年05月13日

【017】サロゲートペア


 サロゲートペア

 Unicode は、1文字を表すのに2バイト使用します。2バイトですから扱うことのできる文字数は、
  256 × 256 = 65536 文字
です。
当初はこれで十分と思われていたのですが、この文字数では不足する状況になってしまったため、扱える文字数を増やす必要が生じました。
このような理由による文字数拡張の過程で、一部の文字を4バイトで表現することになったのですが、この4バイト表現をサロゲートペアと呼んでいます。

 下記のプログラムでは、
   (1) "齟齬・・・物事が食い違って、一致しないこと。"
   (2) "𪗱𪘚・・・物事が食い違って、一致しないこと。"
の文字数を、Stringクラスの Lengthプロパティを利用して、取得しています。
結果は、(1) が 22、(2) が 24 です。

(1) 齟齬  (2) 𪗱𪘚

 実際に文字数を数えてみると、22文字なのですが、なぜ (2) の結果が 24 となるのでしょうか。

 その理由は、(2) の "𪗱" と "𪘚" の文字がサロゲートペアだからです。Lengthプロパティはサロゲートペア文字に対応していないのです。
サロゲートペア1文字は4バイトなので、Lengthプロパティは、これを2文字と判断してしまいます。(2) が 24文字という結果になってしまうのは、このような理由によるものです。

StringクラスLengthプロパティ ではなく、
StringInfoクラスLengthInTextElementsプロパティ であれば、サロゲートペア文字に対応しているので、正しい結果を得ることができます。
(3), (4) の結果は、共に、正しい値である 22 となります。

 以下は、プログラムです。

using System;
using System.Globalization;

namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
// (1)
var string1 = "齟齬・・・物事が食い違って、一致しないこと。";
Console.WriteLine(string1.Length); // 22

// (2)
var string2 = "𪗱𪘚・・・物事が食い違って、一致しないこと。";
Console.WriteLine(string2.Length); // 24

// ------------------------

// (3)
StringInfo str1 = new StringInfo(string1);
Console.WriteLine(str1.LengthInTextElements); // 22

// (4)
StringInfo str2 = new StringInfo(string2);
Console.WriteLine(str2.LengthInTextElements); // 22
}
}
}





ファン
検索
<< 2018年07月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリーアーカイブ
月別アーカイブ
プロフィール
×

この広告は30日以上新しい記事の更新がないブログに表示されております。