C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: 配列の合成


(過去ログ 126 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■75130 / inTopicNo.1)  配列の合成
  
□投稿者/ むしかえし (1回)-(2015/03/02(Mon) 23:23:21)

分類:[VB.NET/VB2005 以降] 

配列の合成
配列DATA1とDATA2に下の様にデータが入っていたとします。
DATA1の先頭の列に、DATA2の先頭の列のデータと一致すれば、
DATA1の配列データの後に、一致したDATA2のデータをくっつけて、
新しいDATAの配列に代入したいです。

配列の数量とか
条件が決めにくいのですが、どんな配列(ARRAY LIST?)を使えば良いか、
または参考になるところとかでも良いので教えて下さい。


DATA1
A101,5101,1125
A102,1201,2325
A103,3301,5225

DATA2
A103,XS335,DS6521,4
A105,XS565,DS1475,5
A101,XS256,DS6625,1

DATA
A101,5101,1125,A101,XS256,DS6625,1
A102,1201,2325
A103,3301,5225,A103,XS335,DS6521,4
A105,,,A105,XS565,DS1475,5
または、
A101,5101,1125,XS256,DS6625,1
A102,1201,2325
A103,3301,5225,XS335,DS6521,4
A105,,,XS565,DS1475,5


引用返信 編集キー/
■75132 / inTopicNo.2)  Re[1]: 配列の合成
□投稿者/ shu (706回)-(2015/03/03(Tue) 10:25:22)
No75130 (むしかえし さん) に返信

サンプル:

Public Class Class1
    Public ID As String
    Public Col1 As String
    Public Col2 As String
    Public Data2 As Class2

    Public Sub New(ID As String, Col1 As String, Col2 As String)
        Me.ID = ID
        Me.Col1 = Col1
        Me.Col2 = Col2
    End Sub

End Class

Public Class Class2
    Public ID As String
    Public Col4 As String
    Public Col5 As String
    Public Col6 As String


    Public Sub New(ID As String, Col4 As String, Col5 As String, COl6 As String)
        Me.ID = ID
        Me.Col4 = Col4
        Me.Col5 = Col5
        Me.Col6 = Col6
    End Sub

End Class



        Dim list1 As New List(Of Class1)
        Dim list2 As New List(Of Class2)

        list1.Add(New Class1("A101", "5101", "1125"))
        list1.Add(New Class1("A102", "1201", "2325"))
        list1.Add(New Class1("A103", "3301", "5225"))

        list2.Add(New Class2("A103", "XS335", "DS6521", "4"))
        list2.Add(New Class2("A105", "XS565", "DS1475", "5"))
        list2.Add(New Class2("A101", "XS256", "DS6625", "1"))

        For Each itm2 In list2
            Dim cpitm2 = itm2
            Dim itm1 = list1.Find(Function(it1) it1.ID = cpitm2.ID)
            If itm1 Is Nothing Then
                itm1 = New Class1(itm2.ID, "", "")
                list1.Add(itm1)
            End If
            itm1.Data2 = itm2
        Next


引用返信 編集キー/
■75137 / inTopicNo.3)  Re[2]: 配列の合成
□投稿者/ むしかえし (2回)-(2015/03/03(Tue) 11:44:43)
No75132 (shu さん) に返信
shuさんありがとうございます。
私のレベルでは解読がとても大変そうです。
取りあえず済みません。
itm2が宣言されてなさそうなのですが、
教えて下さい。ここから分からないです。

引用返信 編集キー/
■75138 / inTopicNo.4)  Re[3]: 配列の合成
□投稿者/ shu (708回)-(2015/03/03(Tue) 11:49:27)
No75137 (むしかえし さん) に返信
> ■No75132 (shu さん) に返信
> shuさんありがとうございます。
> 私のレベルでは解読がとても大変そうです。
> 取りあえず済みません。
> itm2が宣言されてなさそうなのですが、

For Each itm2
で定義を兼ねています。

Find関数は指定された関数の結果が最初にTrueになるものが返ります。
なければNothing,Forループ変数を直接渡すことが出来ないのでcpitm2へ参照コピーしています。


引用返信 編集キー/
■75139 / inTopicNo.5)  Re[4]: 配列の合成
□投稿者/ むしかえし (3回)-(2015/03/03(Tue) 12:21:32)
No75138 (shu さん) に返信
itm2のエラーは消えました。

結果の確認ですが、
下のものを最後に追加しました。
Dim i As Integer
Dim j As Integer
For i = 0 To 3
For j = 0 To 6
Debug.WriteLine(list1(i)(j).ToString())
Next
Next

list1(i)のところで下のエラーしています。
クラス'.Class1'には既定のプロパティがないため、インデックス処理を実行できません。

すみませんが、教えて下さい。




引用返信 編集キー/
■75158 / inTopicNo.6)  Re[5]: 配列の合成
□投稿者/ Azulean (441回)-(2015/03/03(Tue) 22:02:30)
No75139 (むしかえし さん) に返信
> 下のものを最後に追加しました。
> Dim i As Integer
> Dim j As Integer
> For i = 0 To 3
> For j = 0 To 6
> Debug.WriteLine(list1(i)(j).ToString())
> Next
> Next
>
> list1(i)のところで下のエラーしています。
> クラス'.Class1'には既定のプロパティがないため、インデックス処理を実行できません。

あなたが書いたコードがわからないので助言することができないのが実情です。

list1 をきちんと二次元配列、あるいはList(Of List(Of Class1)) といったように多段にしているのですか?
エラーを見る限り、二次元にしていないのに、二次元配列のようにアクセスするコードを書いてエラーになっています。
引用返信 編集キー/
■75159 / inTopicNo.7)  Re[6]: 配列の合成
□投稿者/ むしかえし (4回)-(2015/03/03(Tue) 23:48:21)
2015/03/03(Tue) 23:51:41 編集(投稿者)

■75132 (Shu さん) に返信

Shu さんに教えて頂いたコードで、
list1 に結果があるのだと思うのですが、そのデータの取得方法がわかりません。
理解出来ない為に、
Debug.WriteLine(list1(i)(j).ToString())
などと適当な事を書いて混乱させてしまった様で、すみません。

つまり、75132で Shu さん に書いてもらったコードの結果を確認したいので、Debug.WriteLine等で取得するにはどうすればいいかがわかりません。大変お手数ですが、宜しくお願い致します。


引用返信 編集キー/
■75160 / inTopicNo.8)  Re[7]: 配列の合成
□投稿者/ shu (709回)-(2015/03/04(Wed) 00:55:29)
No75159 (むしかえし さん) に返信

結果の確認なら
        For Each itm1 In list1
            Console.Write("{0}, {1}, {2}", itm1.ID, itm1.Col1, itm1.Col2)
            If itm1.Data2 IsNot Nothing Then
                Console.Write(", {0}, {1}, {2}", itm1.Data2.Col4, itm1.Data2.Col5, itm1.Data2.Col6)
            End If
            Console.WriteLine()
        Next


のようにすれば確認出来ます。

あくまで実装例ですのでそのまま使うのはやりたいことに適合するか分かりません。
構造が理解出来ないようなら使用しない方がよいでしょう。

引用返信 編集キー/
■75172 / inTopicNo.9)  Re[8]: 配列の合成
□投稿者/ ????????? (1回)-(2015/03/04(Wed) 15:09:00)
No75160 (shu さん) に返信
大変有り難う御座いました。
結果良好であることが確認出来ました。
本当に助かります。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -