このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ
  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • VB.NET/文法/配列 へ行く。

*目次 [#q2bd2b14]

#contents


*配列要素のない配列 [#w9d6422f]

 配列の上限要素数にマイナスの値を入れて宣言すると、Lengthが0の配列、即ち配列要素のない配列が初期化される。

Dim i As Integer = 0
Dim a(i - 1) As String

 UBound関数は配列の上限の要素番号を取得する。そのUbound関数に配列要素のない配列を指定すれば-1が返る。

[補講]C言語でa[i]を宣言すれば、インデックスは0〜i-1でi個の要素を持つ配列であり、VB.NETと異なる。さらに、C言語ではiをマイナスにすることはできない。 ◇

*相互変換 [#faee5aa7]

**配列→配列 [#jf5736e4]

 CopyToメソッドで、一次元配列のすべての要素をコピー先配列の指定インデックスを開始位置としてコピーすることができる。

コピー元配列.CopyTo(コピー先配列,開始位置)


*配列のソート [#ea55fd1c]

**構造体配列のソート [#a8da9a42]

#code(vb){{
'ソート用比較演算子
Private Class nameCompare : Implements System.Collections.IComparer
	Public Function Compare(ByVal right As Object, _
				ByVal left As Object) _
				As Integer Implements IComparer.Compare
		Return ((CType(right, struct)).Name).CompareTo((CType(left, struct)).Name)
        End Function
	End Function
End Class

'メイン処理
Public Class TestClass
	'構造体
	Private Structure struct
		Dim Code As String
		Dim Name As String
	End Structure

	'構造体配列のソートを実行(ソート対象はName)
	Private Sub sortStructure(ByVal structList() As struct, _
				  ByRef newStructList() As struct)
		'構造体配列を構造体のArrayListに変換する
		Dim ar As ArrayList = New ArrayList()
		For Each tmpStruct As struct In structList
			ar.Add(tmpStruct)
		Next

		'ArrayListのソートを実行する
		ar.Sort(New nameCompare)

		'構造体のArrayListから構造体配列に変換する
		Dim tmpStuctList(UBound(structList)) As struct
		Dim i As Integer = 0
		For Each st As struct In as
			With tmpStructList(i)
				.Code = ar.Code
				.Name = ar.Name
			End With
			i += 1
		Next
		NewStructList = tmpStructList
	End Sub
End Class

}}


*参考文献 [#zcba1af2]

-『ゼロからはじめるWindowsプログラミング Visual Basic 2008入門』