0
0

VB.net 基本的な文法(繰り返し2)for each文

Posted at

前回の記事では、繰り返しの処理としてfor文を利用しました。
https://qiita.com/HiHiroyoshi/items/24e7d0e0cfdade21c8be

今回は、for each文について取り上げます。
要素数が不明な場合、全要素に対して処理を行いたい場合に利用します。

今回は、新たにDataTableというもの(Object)を扱います。
配列(Array)は、同じ型(Integer:整数やString:文字列)でないと、使えないといった制約があります。
ですが、DataTableでは、列(Column:カラム)ごとにデータ型を宣言することができます。

DataTableのイメージ

Integer(整数) String(文字列) String(文字列2)
1 A Test

配列のイメージ

添え字 0 1 2
3 5 7

といった具合です。
for each文を使うメリットの一つが読みやすさ(可読性)です。
まずは、値を格納しましょう。
下準備をします。
DataTableを生成して、カラム(列)を定義して、
4行ほどのサンプルデータを入れてみます。

'配列を用意
Dim array1() As String = {"Alice", "Bob", "Caroll", "Daisy"}
Dim array2() As String = {"USA", "Canada", "UK", "Japan"}

Dim dataTable1 As New DataTable
'列の追加
dataTable1.Columns.Add("No", GetType(Integer))
dataTable1.Columns.Add("Name", GetType(String))
dataTable1.Columns.Add("Address", GetType(String))

For i = 0 To 3

    Dim dr As DataRow = dataTable1.Rows.Add()
    dr("No") = i + 1
    dr("Name") = array1(i)
    dr("Address") = array2(i)

Next i

これを実行すると、dataTable1に下記のデータが作成されます。
手入力の場合、カラム名には気を付けましょう。
○ No
× NO
○ Address
× Adress
こういった場合、DataTable内に列NOは、テーブルに属していません。
といったメッセージが表示されます。

NoがInteger,NameがString、AddressがStringといった型の具合です。

これが下準備です。

さて、このDataTableに対して、for each文を行ってみましょう。

Datatable(dataTable1)のrow(行)をdatarowとして、dataTable2にデータを置きかえてみます。


        Dim array1() As String = {"Alice", "Bob", "Caroll", "Daisy"}
        Dim array2() As String = {"USA", "Canada", "UK", "Japan"}

        Dim dataTable1 As New DataTable

        dataTable1.Columns.Add("No", GetType(Integer))
        dataTable1.Columns.Add("Name", GetType(String))
        dataTable1.Columns.Add("Address", GetType(String))

        For i = 0 To 3

            Dim dr As DataRow = dataTable1.Rows.Add()
            dr("No") = i + 1
            dr("Name") = array1(i)
            dr("Address") = array2(i)

        Next i

        Dim dataTable2 As New DataTable

        dataTable2.Columns.Add("No", GetType(Integer))
        dataTable2.Columns.Add("Name", GetType(String))
        dataTable2.Columns.Add("Address", GetType(String))

        For Each dr As DataRow In dataTable1.Rows

            Dim dr2 As DataRow = dataTable2.Rows.Add()
            dr2("No") = dr("No")
            dr2("Name") = dr("Name")
            dr2("Address") = dr("Address")

        Next dr

dataTable1をdataTable2に置き換えただけなので、cloneメソッドを使えば一発だと思われた方もいるかと思いますが、For Each 文に関して述べさせていただくためのサンプルということで......

まとめ

For文は、For Each文を利用することも可能です。
For Eachを利用して全要素に対して処理を行うことで比較的に読みやすいコードを書くことが可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0