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

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

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

Re[5]: VB.Netでの多次元配列生成


(過去ログ 64 を表示中)

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

■37104 / inTopicNo.1)  VB.Netでの多次元配列生成
  
□投稿者/ すらりん (1回)-(2009/06/12(Fri) 18:11:31)

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

はじめまして。
VB.Net学習中の初心者なのですが、多次元配列相当のクラス(もしくは構造体)を作れないかなといろいろ試していますが、
経験/センスがないのでなかなか思うようなプログラムが作成できず困っています。
下記パターンにあったクラスを作成するにはどのような方法がありますでしょうか?
すみませんが、お詳しい方がおられましたらご教示頂けますと幸いです。

◆配列でいうとAAA(1,N)がX個存在するような形をとりたく、
AAA(X1).N1
AAA(X1).N2
AAA(X1).N3
  :
AAA(X2).N1
AAA(X2).N2
AAA(X2).N3
  :
のように使用する方向で考えています。
N1〜N3..の型はそれぞれで宣言する形にしたいです。
(N1:Integer,N2:String,N3:DateTimeなど)

HashTableクラスに近い使い方をしたいのですが、HashTableだと当然Keyに対してValueしかもてないので(T_T)
理想系はAddやClear、Containメソッドを持たせればなと考えています。
※上記でいうと、N1がユニークになる前提とかの方が楽なのでしょうかね。。。

何か良い方法が御座いましたら、ご教示をお願い致します。m(_ _)m


引用返信 編集キー/
■37105 / inTopicNo.2)  Re[1]: VB.Netでの多次元配列生成
□投稿者/ すらりん (3回)-(2009/06/12(Fri) 18:30:10)
2009/06/13(Sat) 04:11:04 編集(投稿者)

> ◆配列でいうとAAA(0toX)がそれぞれでN1,N2...のような要素をもつ形をとりたく、
に変更です。
引用返信 編集キー/
■37106 / inTopicNo.3)  Re[2]: VB.Netでの多次元配列生成
□投稿者/ やじゅ (1037回)-(2009/06/12(Fri) 19:21:41)
やじゅ さんの Web サイト
2009/06/12(Fri) 19:26:27 編集(投稿者)

No37105 (すらりん さん) に返信

構造体を作成して
N1:Integer
N2:String
N3:DateTime

ArrayList.Add(構造体) とか・・・

【VB.NET】構造体の項目にArrayListを利用する
http://blog.livedoor.jp/akf0/archives/51294097.html
引用返信 編集キー/
■37108 / inTopicNo.4)  Re[3]: VB.Netでの多次元配列生成
□投稿者/ すらりん (4回)-(2009/06/12(Fri) 20:11:47)
2009/06/13(Sat) 04:03:43 編集(投稿者)
>やじゅさま
早速のご返信ありがとうございます。
ArrayListへ構造体を追加することなんてできるのですね。。。
下記サンプルで良いかどうかは微妙ですが...
意図した事ができそうなものが作れました。
(Contains/Clearメソッドは工夫がいりそうですが(^_^;A)
どうもありがとうございました。m(_ _)m
==============================================================================================================
    Private Sub test()
        Dim aryTest As New ArrayList
        Dim Man As New MemberN
        aryTest.Add(Man)
        aryTest.Item(0).Add(1, "N1", Now())
        aryTest.Add(Man)
        aryTest.Item(1).Add(2, "N2", Now())
        Console.WriteLine(String.Format("aryTest(0).Item:{0}{1}{2}{1}{3}", _
                                            aryTest.Item(0).N1, ",", aryTest.Item(0).N2, aryTest.Item(0).N3))
        Console.WriteLine(String.Format("aryTest(1).Item:{0}{1}{2}{1}{3}", _
                                            aryTest.Item(1).N1, ",", aryTest.Item(1).N2, aryTest.Item(1).N3))
    End Sub

    Public Structure MemberN
        Public N1 As Integer
        Public N2 As String
        Public N3 As Date
        Public Sub Add(ByVal _n1 As Integer, ByVal _n2 As String, ByVal _n3 As Date)
            N1 = _n1 : N2 = _n2 : N3 = _n3
        End Sub
    End Structure
==============================================================================================================

引用返信 編集キー/
■37109 / inTopicNo.5)  Re[4]: VB.Netでの多次元配列生成
□投稿者/ すらりん (5回)-(2009/06/12(Fri) 20:13:18)
解決済みにしておきますm(__)m
解決済み
引用返信 編集キー/
■37120 / inTopicNo.6)  Re[5]: VB.Netでの多次元配列生成
□投稿者/ すらりん (6回)-(2009/06/13(Sat) 03:58:01)
2009/06/13(Sat) 04:15:38 編集(投稿者)
すみません。しつこいですがクラスバージョンもサンプル作ってみたので載っけておきます。
もっと良い方法があればご教示いただけますとありがたいですm(_ _)m

-------------------------------------------------------------------------------------------------------
Public Class Array2

    Public Shared Sub test()
        Dim aryTest As New ArrayList
        Dim Man1 As New MemberNN(1, "N1", Today())
        Dim Man2 As New MemberNN(2, "N2", Today())
        Dim Man3 As New MemberNN(3, "N3", Today())
        Dim Man4 As New MemberNN(2, "N2", Today())
        Try
            aryTest.Add(Man1)       'Item(0)に{1,"N1",Today()}をAdd
            aryTest.Add(Man2)       'Item(1)に{2,"N2",Today()}をAdd

            'aryTestの中身をテスト出力
            Console.WriteLine(String.Format("aryTest.Count:{0}", aryTest.Count))
            Console.WriteLine(String.Format("aryTest.Item(0):{0}{1}{2}{1}{3}", aryTest.Item(0).N1, ",", aryTest.Item(0).N2, aryTest.Item(0).N3))
            Console.WriteLine(String.Format("aryTest.Item(1):{0}{1}{2}{1}{3}", aryTest.Item(1).N1, ",", aryTest.Item(1).N2, aryTest.Item(1).N3))

            'Containsメソッド確認用テスト出力
            If aryTest.Contains(Man3) Then
                Console.WriteLine("MAN3はAddされておらずここは通らない")
            ElseIf aryTest.Contains(Man1) Then
                Console.WriteLine("MAN1は既にAdd済みのためここは通る")
            End If
            If aryTest.Contains(Man4) Then
                Console.WriteLine("N1〜N3の値はMan2=Man4だが、AddしていないMan4はContainsで見つからずここは通らない")
                '⇒つまり、Containsメソッドは存在はするが意図した使用が不可能(T_T)
            End If

            'Clearメソッド確認
            aryTest.Clear()
            Console.WriteLine(String.Format("aryTest.Count:{0}", aryTest.Count))

        Catch ex As Exception
            Throw
        Finally
            'Newしただけに、DisposeかNothing入れとくべき!?要素分処理記述はきついですね(T_T)
            Man1 = Nothing : Man2 = Nothing : Man3 = Nothing : Man4 = Nothing
        End Try
    End Sub
-------------------------------------------------------------------------------------------------------
    Public Class MemberNN

        Private _n1 As Integer
        Private _n2 As String
        Private _n3 As Date
        Sub New(ByVal _nn1 As Integer, ByVal _nn2 As String, ByVal _nn3 As Date)
            _n1 = _nn1 : _n2 = _nn2 : _n3 = _nn3
        End Sub
        Public ReadOnly Property N1() As Integer
            Get
                Return _n1
            End Get
        End Property
        Public ReadOnly Property N2() As String
            Get
                Return _n2
            End Get
        End Property
        Public ReadOnly Property N3() As Date
            Get
                Return _n3
            End Get
        End Property
    End Class
End Class
-------------------------------------------------------------------------------------------------------
==出力==
aryTest.Count:2
aryTest.Item(0):1,N1,2009/06/13 0:00:00
aryTest.Item(1):2,N2,2009/06/13 0:00:00
MAN1は既にAdd済みのためここは通る
aryTest.Count:0
-------------------------------------------------------------------------------------------------------

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -