Home / 記事 / プログラム言語 / C# / C# の配列と文字列 (2/3)

e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。

C# プログラミングシリーズ

C# の配列と文字列 (2/3)

Yashavant Kanetkar
Yashavant Kanetkar

おそらく、配列と文字列はプログラミング言語自体と同じくらい古いものです。あまりにも長い歴史があるため、ほとんど注目されることさえなくなっています。C# を学習するときには、このような誤りを犯さないでください。C# での配列と文字列は、昔からあるものとは異なり、いっそう強力になっています。何もない状態から言語を開発し、古い言語との互換性を保証する必要がなければ、このような結果になるのは当然のことですが。

System.Array 型

System.Array クラスは、自動的にすべての配列型の基本クラスになります。したがって、配列への参照を System.Array クラスへの参照に格納できます。C または C++ とは異なり、.NET ランタイムはすべての配列について境界検査を実施し、配列の境界を越えている場合は System.IndexOutOfRangeException をスローします。

配列クラスには、配列の作成、操作、検索、および並べ替えのためのメソッドが用意されています。次のプログラムでは、一部の System.Array メソッドの使用方法を示します。

using System ;
class onedarray
{
    static void Main ( string[ ] args )
    {
        int[ ] arr1 = new int [ 5 ] { 1, 4, 7, 8, 9 } ;
        int[ ] arr2 = new int [ 10 ] ;
        arr1.CopyTo ( arr2, 0 ) ;
        Console.WriteLine ( "Elements of arr2: " ) ;
        foreach ( int i in arr2 )
            Console.Write ( i + " " ) ;
        Console.WriteLine( ) ;
        arr2.SetValue ( 5, 0 ) ;
        Console.WriteLine ( "Elements of arr2: " ) ;
        foreach ( int i in arr2 )
            Console.Write ( i + " " ) ;
        Console.WriteLine( ) ;
        Console.WriteLine ( "Number of elements in arr1:" + arr1.Length ) ;
        Console.WriteLine ( "Number of elements in arr2:" + arr2.Length ) ;
        Array.Copy ( arr1, 2, arr2, 6, 2 ) ;
        Console.WriteLine ( "Elements of arr2: " ) ;
        foreach ( int i in arr2 )
            Console.Write ( i + " " ) ;
        Console.WriteLine( ) ;
        Array.Reverse ( arr2 ) ;
        Console.WriteLine ( "Elements of arr2: " ) ;
        foreach ( int i in arr2 )
            Console.Write ( i + " ") ;
        Console.WriteLine( ) ;
        Array.Sort ( arr2 ) ;
        Console.WriteLine ( "Elements of arr2: " ) ;
        foreach ( int i in arr2 )
            Console.Write ( i + " " ) ;
        Console.WriteLine( ) ;
        Console.WriteLine ( "Index of 8 is " + Array.IndexOf ( arr2, 8 ) ) ;
        Array.Clear ( arr2, 3, 3 ) ;
        Console.WriteLine ( "Elements of arr2: " ) ;
        foreach ( int i in arr2 )
            Console.Write ( i + " " ) ;
        Console.WriteLine( ) ;
    }
}

このプログラムでは、arr1 および arr2 という名前の 2 つの 1 次元 int 配列を作成しています。arr1 は 5 要素で初期化し、arr2 は初期化していません。したがって、コンパイラが arr2 をゼロ (つまり int 型の既定値) に初期化します。CopyTo( ) メソッドを使用して、arr1 のインデックス 0 からの要素を arr2 にコピーします。foreach ループを使用して、arr2 の要素を印刷します。出力は次のようになります。

Elements of arr2:
1 4 7 8 9 0 0 0 0 0

最初の 5 つの要素を arr1 から arr2 にコピーしたので、残りの要素はゼロのままです。SetValue( ) メソッドは、値 (1 番目のパラメータで指定) を配列の指定したインデックス (2 番目のパラメータで指定) に設定します。ここでは、arr2 の 0 番目の要素に値 5 を設定しています。値を設定した後の出力は次のようになります。

Elements of arr2:
5 4 7 8 9 0 0 0 0 0

Length は、配列内の要素の総数を示すプロパティです。プロパティはメソッドと似ており、データを操作するために使用されます。このプログラムの arr1Length が 5 であるのに対し、arr2Length は 10 です。Copy( )Reverse( )Sort( )Clear( ) の各メソッドは、System.Array クラスの static メソッドです。Copy( ) メソッドは、配列から配列に要素のグループをコピーするために使用されます。このメソッドには、次に示す 2 つのオーバーロード バージョンがあります。

public static void Copy ( Array, Array, int )

および

public static void Copy ( Array, int, Array, int, int )

第 1 のバージョンは、コピー元配列への参照、コピー先配列への参照、およびコピーする要素の数を受け取ります。第 2 のバージョンは、コピー元配列への参照、コピー元配列でコピーを開始する位置のインデックス、コピー先配列への参照、コピー先配列で要素を格納する先頭位置のインデックス、およびコピーする要素の数を受け取ります。先のプログラムでは、2 番目のバージョンを使用しています。arr1 のインデックス 2 の要素からコピーを開始するように指定しています。そして、2 個の要素を、arr2 のインデックス 6 以降にコピーしています。この操作の後で、出力は次のようになります。

Elements of arr2:
5 4 7 8 9 0 7 8 0 0

Reverse( ) メソッドは、配列の要素を反転します。このメソッドにはオーバーロード バージョンが 1 つあり、反転する配列の参照、反転操作を開始する位置のインデックス、2 番目のパラメータで指定したインデックスから数えた反転する要素の数を受け取ります。この操作の結果は次のようになります。
Elements of arr2:
0 0 8 7 0 9 8 7 4 5

Sort( ) メソッドは、配列を昇順に並べ替えます。配列を降順に並べ替える場合は、いったん昇順に並べ替えてから反転させます。配列を並べ替えた後の結果は次のようになります。

Elements of arr2:
0 0 0 4 5 7 7 8 8 9

IndexOf( ) メソッドは、配列の指定した要素のインデックスを返します。このプログラムでは、要素 8 のインデックスを印刷しており、結果は 7 です。配列内に 8 が複数ある場合は、最初の要素のインデックスが返されます。Clear( ) メソッドは、1 番目のパラメータで指定するインデックス以降の要素をすべてクリアします。また、2 番目のパラメータとして、クリアする要素の数を指定する必要があります。値型の要素はゼロに再初期化され、参照型の要素は null に再初期化されます。結果は次のようになります。

Elements of arr2:
0 0 0 0 0 0 7 8 8 9

コメント

コメントするにはログイン、もしくはユーザ登録を行ってください。

発売中

LET US C(上)
インド人ITエンジニアのCプログラミングのバイブル。通算100万冊以上売れています。
― 2,520円 ―

Y. Kanetkar

発売中

Introduction to Object Oriented Programming & C++
C++を例に、多彩なサンプルコードと簡潔な説明でOOPプログラミングの実際が理解できる。
2,940

Y. Kanetkar

発売中

Microsoft .NET Web Application Security
APプログラムの作り方で不正侵入の防御率を向上させる手法を解説。今までにないセキュリティーの手法を紹介します。
3,990円

Vijay Mukhi

2008年の11月発売予定

Quest C++ ビジュアルラーニングコース
これがあれば、見て聞くだけで楽しみながらプログラミングテクニックが身につきます。
― 9,975円 ―

Y. Kanetkar Asang Dani

2008年の11月発売予定

Programmer's Guide to Web Application Security
Web System への侵入方法と原理を解説する事により、防止方法を理解することが出来る。
3,990

Vijay Mukhi

フォーラムの最新ポスト