こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

変数を動的に作るには?

変数を作成する際には必要な分だけ一つずつ宣言する必要があるのでしょうか?

例えば、連番を格納する文字列型変数を一時的に100個必要だとすると

Dim textdat1 As String = "Number1"
Dim textdat2 as String = "Number2"
Dim textdat3 as String = "Number3"
     ・
     ・
     ・
と100個宣言しないといけないと思うのですがこれを

For i As Integer = 1 To 100
Dim textdat(i) As String = "Number" & i
Next i

という様な形で変数を作成することは出来ないのでしょうか。

初歩的な質問かもしれませんが、よろしくお願いします。

投稿日時 - 2009-10-07 15:20:22

QNo.5348939

すぐに回答ほしいです

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

こういうのは、
「配列」という仕組みの必要性を書いてある説明の、始めにかならず書いてあることでしょう。
その配列を使えばよいでしょう。
配列を使いますという宣言(次元と要素) Dim
配列をクリア Array.Clear
配列の次元と要素をプログラムの実行中に変える Redim
Array.Resize
配列を抹消
配列の値を初期化
配列のメソッド・プロパティ
ーーー
下記を参考に
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard27.htm
http://smdn.invisiblefulmoon.net/programming/vb.net/basics/05_array/
ーー
質問にVB6かVB.NET系か書くようにしてください。

投稿日時 - 2009-10-07 20:07:37

お礼

忘れていました、使用言語はVB.NETです。
求めていた事は配列で解決する事が出来ました。
他に回答していただいた方も他の用途で参考にさせて頂きます。
有難う御座いました。

投稿日時 - 2009-10-08 11:45:36

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

Reflectionを使用すれば動的に変数を宣言できます。
とっても難しいですよ。
ArrayListのようなコレクションクラスを使って動的に配列を生成すれば目的は達成できるのでは?
参考になれば幸いです。

Dim nameLists As New List(Of String)
nameLists.Add("どら")
nameLists.Add("のび")
nameLists.Add("しず")
nameLists.Add("じゃい")
nameLists.Add("すね")

'じゃいを削除
nameLists.Remove("じゃい")
For Each Name As String In nameLists
Console.WriteLine(Name)
Next

nameLists = Nothing
'なんとしても変数名でがんばりたい場合
'StringDictionaryでもよいほかにも使えますが今回はHashTableで
'Dim s As Collections.Specialized.StringDictionary

Dim nameHashTable As New Hashtable
Dim counter As Integer = 0

nameHashTable.Add("Number" & counter, "どら")
counter += 1
nameHashTable.Add("Number" & counter, "のび")
counter += 1
nameHashTable.Add("Number" & counter, "しず")
counter += 1
nameHashTable.Add("Number" & counter, "じゃい")
counter += 1
nameHashTable.Add("Number" & counter, "すね")

'すねを削除
nameHashTable.Remove("Number" & counter)

For i As Integer = 1 To nameHashTable.Count - 1
Console.WriteLine(nameHashTable("Number" & i))
Next i

投稿日時 - 2009-10-07 15:51:05

Option Explicit On
Option Strict On
Option Compare Binary
Option Infer Off
Class Q5348939
Shared Sub Main()
'普通に配列を作ってみる
Dim hoge(10) As String

For i As Integer = 0 to 10
hoge(i) = i.ToString()
Next i

System.Diagnostics.Debug.Print(hoge(3)) '"3"
'System.Diagnostics.Debug.Print(hoge3) hoge3という変数を作っているわけではないのでコンパイルエラー。以下同文

'ReDim Preserveはあまり好きじゃないのでArray.Resize
'どうしても動的でなきゃだめ?
Dim fuga As String()
For i As Integer = 0 to 10
Array.Resize(fuga,i + 1)
fuga(i) = i.ToString()
Next i
System.Diagnostics.Debug.Print(fuga(10))

'俺はリストのほうが好みかな

Dim guri As System.Collections.Generic.List(Of String)
guri = new System.Collections.Generic.List(Of String)()
For i As Integer = 0 to 10
guri.Add(i.ToString())
Next i
System.Diagnostics.Debug.Print(guri(4))
'自動でずれる

guri.RemoveAt(4)
System.Diagnostics.Debug.Print(guri(4))


End Sub
End Class

投稿日時 - 2009-10-07 15:44:46

あなたにオススメの質問