色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

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

例えば、連番を格納する文字列型変数を一時的に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

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

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

gooドクター

A 回答 (3件)

こういうのは、


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

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

お礼日時:2009/10/08 11:45

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
    • good
    • 0

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
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング