サイズのわからない配列を扱う方法とは?

このQ&Aのポイント
  • サイズのわからない配列を扱う際、配列が1次元であればListを使用して扱うことができます。配列をListに変換し、サイズを求めることができます。
  • しかし、配列が2次元の場合はListを使用することができません。2次元のデータを最初から配列の大きさを定義せずに利用する方法について、まだ良い方法が見つかっていません。
  • 配列が2次元の場合、他の方法を探す必要があります。新しい方法が見つかり次第、アップデートさせていただきます。
回答を見る
  • ベストアンサー

サイズのわからない配列

お世話になっております。 最初からサイズの不明な配列を扱いたいときに、いろいろ調べたら 配列が1次元の場合、次のような方法で扱えることがわかりました。 dim userlist as new list(of string) 'List dim user as string() '配列 userlist.add("taro") userlist.add("hanako") user = userlist.toarray 'Listを配列に変換 debug.print(user.length) '配列のサイズを求める ところが、配列が2次元の場合、Listは使えないようなのです。 UserID password ------+--------- taro abc hanako xyz こんな感じの2次元データを最初から配列の大きさを定義すること なく利用したいのですが、何か良い方法がございましたら、ご教授 のほどお願いいたします。

  • myart
  • お礼率69% (18/26)

質問者が選んだベストアンサー

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

Module Module1 Sub Main() Dim l As New List(Of data) Dim d As data l.Add(New data("id001", "jjj")) l.Add(New data("id002", "kkk")) l.Add(New data("id003", "ppp")) For Each d In l Debug.Print(d.id & " " & d.pass) Next End Sub Structure data Dim id As String Dim pass As String Public Sub New(ByVal id As String, ByVal pass As String) Me.id = id Me.pass = pass End Sub End Structure End Module

myart
質問者

お礼

アドバイスありがとうございます。 なるほど、ご呈示いただいた方法について調べてみますと、 構造体というんですね。 この方法だと望んだことが実現できました。 ありがとうございました。

関連するQ&A

  • Generic.Listに1次元配列の配列を格納したい(VB2005)

    VB2005の質問です。 変数ghogeにString型の1次元配列の配列を格納したいと考えています。 ----------------------------------------------- 'a) Dim hoge()() As string = _       {New string() {"a1", "b1", "c1"}, _       New string() {"a2", "b2", "c2"}, _       New string() {"a3", "b3", "c3"}} Dim ghoge As New Generic.List(of )   'b) MessageBox.Show(ghoge(1)(1))      ' "b2"と表示したい ----------------------------------------------- 質問内容は、(a)を(b)の初期値として設定するにはどのようにすればよいか、ということです。 (b)がGeneric.ListでなくArrayListの場合だと、   Dim ghoge As New ArrayList(hoge) でhoge配列を格納できますが、Generic.Listの場合はどのような構文にすればよいでしょうか。 現在は、下記のような処理でghogeに値を格納しています。 ------------------------------------------------------------ Dim ghoge As New Generic.List(Of Generic.List(Of String)) Dim aryhoge1 As New Generic.List(Of String)(New String() {"a1", "b1", "c1"}) Dim aryhoge2 As New Generic.List(Of String)(New String() {"a2", "b2", "c2"}) gary_hoge.Add(ary_hoge1) gary_hoge.Add(ary_hoge2) MessageBox.Show(gary_hoge(1)(1))    ' "b2"と表示される ------------------------------------------------------------ どうぞよろしくお願い致します。

  • Listに格納されているオブジェクトの照合(パターンマッチング?)

    2つのListオブジェクトを比較して、 それぞれの要素に格納されているクラスの属性が 一致しているかどうか、また、格納されている順番が同じかどうかを 調べたいのですが・・。 例えば、以下のようなかんじです↓ 1. 比較するListオブジェクト(1):userList //Userオブジェクト生成 User user1 = new User(); user1.setUserID(2); User user2 = new User(); user2.setUserID(4); //UserオブジェクトをListに格納 List userList = new ArrayList(); userList.add(user1); userList.add(user2); 2. 比較するListオブジェクト(2):specialUserList ※1.と同じ要領で生成されたもの List specialUserList; 3. 1と2を比較する 比較内容は以下の通りです。 1のListオブジェクト(userList)は、 1番目の要素に、 UserID:2 を持つUserオブジェクト 2番目の要素 に、UserID:4 を持つUserオブジェクト が格納されていますが、 2のListオブジェクト(specialUserList)も、 これと同じ構成で格納されているかどうか調べたいのです。 例えば、 2のListオブジェクトも、 1番目の要素に、 UserID:2 を持つUserオブジェクト 2番目の要素 に、UserID:4 を持つUserオブジェクト が格納されていればOKとし、上記以外であれば、NGとします。 例えば、以下のような内容がNGです。 1番目の要素に、 UserID:1(※2以外) を持つUserオブジェクト 2番目の要素 に、UserID:8(※4以外)を持つUserオブジェクト つまり、List要素に格納されている内容と、その格納されている順番が、 1と2で同じかどうかを調べたいのです。 もし分かる方いましたら、お力をお貸しください・・・

    • ベストアンサー
    • Java
  • 配列の宣言の仕方

    vs2005を使用しています。 配列の宣言の方法はいくつかあるようですが 違いが分かりません。 Dim strDate() As String = New String(1) {} Dim strDate() As String = New String(1) {"",""} Dim strDate As String() = {"", ""} Dim strDate (1) As String Dim strDate As New ArrayList も候補のひとつですが、この違いは分かります。 やりたいことは、要素数2の配列を""で初期化したいというものです。 そしてその配列を返す関数を作成しています。 どれも同じように思うのですが、違いがあれば教えていただきたいと思います。 よろしくお願いします。 でもかまわないのですが、

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

  • 二次元配列のVBA

    二次元配列のVBAの書き方がよくわからないのですが、 私が作ったサンプルプログラムのSub 二次元()において 二次元配列で表すにはどうすればいいのでしょうか? Sub 二次元()では 配列を格納する変数はtmpしか使っていませんが もう一つ配列を格納する用の変数を作ればいいのでしょうか? 数字とアルファベットは別々に取り出したいです。 ----------------------------------------------------- Sub 一次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub Sub 二次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i & "と" & Chr(64 + i) Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub

  • VB.NET 2次元配列

    二次元配列に関して質問があります。 二次元配列を定義します。 Dim a(,) As Integer = _ {{0, 0, 0, 0, 0, 0, 1, 1, 1}, _ {0, 0, 0, 0, 0, 1, 0, 0, 1}, _ {0, 0, 0, 0, 0, 0, 1, 1, 1}} 一次元配列を定義します。 Dim b() As Integer 一次元配列のb()に二次元配列a(,)の {0, 0, 0, 0, 0, 0, 1, 1, 1}の部分を 入れようとした場合、 どのように記載すればよろしいでしょうか? イメージ的には b = a(0) で出きると思ったのですが、 構文エラーとなってしまいます。 よろしくお願いします。

  • 配列について

    配列の要素数をinteger型にいれたいのですがどうしたらいいですか? 例   Dim A() As String   Dim B AS Integer       A = "あ","い","う" Aの要素数3をBに入れたいのです。 この配列の作りかたもあっているか分かりませんがよろしくお願いします。

  • 2次元配列の宣言について

    文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、Array~)等はどのように記述すればよろしいですか? 基本的な質問でごめんなさい。 よろしくお願いします。

  • VB6で、一次元配列と二次元配列の相互コピー

    VB6で、一次元配列と二次元配列の相互コピーをしたいです。 (1)元々下記のような宣言をもつ配列がありました。 Public Type TKey no As String id As String code As String atr() As String End Type Public Type tr Key As TKey atr() As String abc As Boolean End Type Public gtr() As tr (2)コピー用に、下記のような二次元配列用宣言をつくりました。 Public Type TKey2 2no As String 2id As String 2code As String a2tr() As String End Type Public Type 2tr Key22 As TKey2 atr22() As String abc22 As Boolean End Type Public g2tr() As 2tr (3)  (1)から(2)にデータを複製したり、 (4)  (2)から(1)にデータを複製したいです。 今は、下記のように面倒くさいことをしています。 dim gtr(maxcnt) ReDim Preserve g2tr(500, maxcnt) ループ g2tr(cnt, i).Key22.2code = gtr(i).Key.code ・・・(3) gtr(i).Key.code = g2tr(j, i).Key22.2code ・・・(4)       今は上記を全ての宣言の配列に実行しています。 なにかもっと効率のよい方法はないでしょうか。 (1)の配列は、1~500くらいはあり、不定です。

  • 二つの配列の要素を比べる方法がわかりません

    いつもお世話になっています。 n行3列の配列のVectorが二つあります。 その同じ行と列に対応する要素どうしを比較する ためにVectorから値を取得したいのですが、その 方法がわかりません。 なんとなくtoArrayというメソッドを使うんじゃないのかなあという気はしてるんですが…。 ちなみにVectorにaddするときは、1行3列のString型の配列をaddしています。 Vectorの配列から要素を取り出す方法をご存知の方が いらっしゃいましたら、ご教授ください。

    • ベストアンサー
    • Java

専門家に質問してみよう