.NET VB 配列②

最終更新日

.NET VB 配列①の続き…ジャグ配列、配列内のバイナリサーチ、要素のクリア、配列の初期化、配列コピー、配列内の要素のソート・逆ソート、配列の型の調べ方、配列の次元数の調べ方について調べたので解説風に記録しておく。

ジャグ配列

ジャグ配列とは、配列の要素配列を持つことができる。また、ジャグ配列は、1つの配列の中に異なる構造の1次元配列を管理することができる。

管理側と管理される側の配列のデータ型は同じ必要がある。

ジャグ配列解説図
  1. ジャグ配列を宣言する。
  2. Newキーワードを使い配列を管理する配列を準備する。
  3. 管理される側のNewキーワードを使用して準備する。

宣言方法

'基本的な使用方法
Dim 配列名()() As データ型
配列名 = New データ型 (要素の上限数)(){} '配列を管理するための配列
配列名(インデックス) = New データ型{初期値,初期値,...}

'宣言と初期化する方法
Dim 配列名 = New データ型(要素の上限数)(){}
配列名(インデックス) = New データ型{初期値,初期値,...}

サンプル

Dim userList = New String(2)() {}
userList(0) = New String(1) {"鈴木", "田中"}
userList(1) = New String(2) {"佐藤", "田部", "東"}
userList(2) = New String(3) {"佐々木", "渡部", "東条", "田中"}

For i As Integer = 0 To userList.Length - 1
    For j As Integer = 0 To userList(i).Length - 1
        Console.WriteLine("ジャグ配列の値:" & userList(i)(j))
    Next
Next
サンプル実行結果図
サンプル 実行結果

Arrayクラス

配列はArrayクラスを継承しているため、Arrayクラスの各メソッドが使用できる。

バイナリサーチ

書式

Array.BinarySearch(配列変数名, 検索文字)

サンプル

Dim userList() As String = {"田中", "佐藤", "鈴木", "太田"}

'要素内の佐藤の位置を検索する。
Console.WriteLine("インデックス位置:" & Array.BinarySearch(userList, "佐藤"))
サンプル実行結果図
サンプル 実行結果

同じものがあった場合、最初の位置を調べる

書式

Array.IndexOf(配列変数名, 検索文字)

サンプル

Dim userList() As String = {"田中", "佐藤", "鈴木", "太田", "佐藤", "佐々木"}
'要素内の佐藤の位置を検索する。
Console.WriteLine("インデックス位置:" & Array.IndexOf(userList, "佐藤"))
サンプル実行結果図
サンプル 実行結果

同じものがあった場合、最後の位置を調べる

書式

Array.LastIndexOf(配列変数名, 検索文字)

サンプル

Dim userList() As String = {"田中", "佐藤", "鈴木", "太田", "佐藤", "佐々木"}

'要素内の佐藤の位置を検索する。
Console.WriteLine("インデックス位置:" & Array.LastIndexOf(userList, "佐藤"))
サンプル実行結果図
サンプル 実行結果

全要素のクリア

配列の要素をまとめてクリアする。

書式

Array.Claer(配列変数,インデックス,要素数)

サンプル

Dim userList() As String = {"田中", "斉藤", "鈴木", "太田", "佐藤"}
Array.Clear(userList, 1, 4) ' 斉藤~佐藤までの要素をクリア

For i As Integer = 0 To 4
    If userList(i) <> Nothing Then
        Console.WriteLine("配列(" & i & ")番目の値:" & userList(i).ToString)
    End If
Next
サンプル実行結果図
サンプル 実行結果

全要素のクリア(初期化)

配列自体を初期化するには、Newキーワードを使用する。

書式

Dim 配列変数() As データ型 = {初期値, 初期値,...}
'Newキーワードで初期化
price = New データ型() {値, 値,...}

サンプル

Dim price() As Integer = {100, 200, 250, 150}
price = New Integer() {0, 0, 0, 0}

For i As Integer = 0 To price.Length - 1
    Console.WriteLine(price(i))
Next
サンプル実行結果図
サンプル 実行結果

配列のコピー

CopyToメソッド

一次配列すべての要素の値を、コピー先配列の指定インデックス以降にコピーする。別の配列にコピーの配列を追加するイメージに近い。コピー先の配列には、コピー元要素数を格納できる要素数が必要である。

書式

コピー元配列名.CopyTo(コピー先配列,インデックス)

サンプル

Dim userList() As String = {"田中", "斉藤", "鈴木", "太田"}
Dim userListTarget() As String = {"田岸", "", "", "", ""}

'userList配列をクローンする。
userList.CopyTo(userListTarget, 1)

For i As Integer = 0 To userListTarget.Length - 1
    If userListTarget(i) <> Nothing Then
Console.WriteLine("配列(" & i & ")番目の値:" & userListTarget(i).ToString)
    End If
Next
サンプル実行結果図
サンプル 実行結果

Cloneメソッド

書式

配列のすべての要素をコピーできる。

コピー元配列.Clone()

サンプル

Dim userList() As String = {"田中", "斉藤", "鈴木", "太田", "佐藤"} 
Dim userListTarget() As String

'userList配列をクローンする。
userListTarget = userList.Clone

For i As Integer = 0 To userListTarget.Length - 1
    If userListTarget(i) <> Nothing Then
        Console.WriteLine("配列(" & i & ")番目の値:" & userListTarget(i).ToString)
    End If
Next
サンプル実行結果図
サンプル 実行結果

代入演算子=を使用する。

書式

コピー先の配列変数名 = コピー元の配列変数名

サンプル

Dim userList() As String = {"田中", "斉藤", "鈴木", "太田"}
Dim userListTarget() As String = {"田岸", "", ""}

'userList配列をコピーする。
userListTarget = userList

For i As Integer = 0 To userListTarget.Length - 1
    If userListTarget(i) <> Nothing Then
        Console.WriteLine("配列(" & i & ")番目の値:" & userListTarget(i).ToString)
    End If
Next
サンプル実行結果図
サンプル 実行結果

要素を逆に並べ替える

書式

Array.Reverse(配列変数名)

サンプル

Dim userList() As String = {"田中", "佐藤", "鈴木", "太田"}
'逆ソート
Array.Reverse(userList)


For i As Integer = 0 To userList.Length - 1
    If userList(i) <> Nothing Then
        Console.WriteLine("配列(" & i & ")番目の値:" & userList(i).ToString)
    End If
Next
サンプル実行結果図
サンプル 実行結果

要素を辞書順に並べ替える

書式

Array.Sort(配列変数名)

サンプル

Dim userList() As String = {"田中", "佐藤", "鈴木", "太田"}
'ソート
Array.Sort(userList)


For i As Integer = 0 To userList.Length - 1
    If userList(i) <> Nothing Then
       Console.WriteLine("配列(" & i & ")番目の値:" & userList(i).ToString)
    End If
Next
サンプル実行結果図
サンプル 実行結果

配列の次元数

書式

配列変数名.Rank

サンプル

'一次元配列の宣言と初期化
Dim userList1D() As String = {"田中", "佐藤", "鈴木", "太田", "佐藤", "佐々木"}

'二次元配列の宣言と初期化
Dim userList2D(,) As String = {
      {"田中", "斉藤", "鈴木"},
      {"太田", "佐藤", "麻生"}
}

'三次元配列の宣言と初期化
Dim userList3D(,,) As String = {
       {{"田中", "斉藤", "鈴木"}, {"田中", "佐藤", "鈴木"}},
      {{"佐藤", "西郷", "佐々木"}, {"須藤", "佐藤", "橋本"}}
}

'要素内の佐藤の位置を検索する。
Console.WriteLine("一次配列:" & userList1D.Rank)
Console.WriteLine("二次配列:" & userList2D.Rank)
Console.WriteLine("三次配列:" & userList3D.Rank)
サンプル実行結果図
サンプル 実行結果