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

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

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

Re[6]: 2次元配列  Redimについて


(過去ログ 44 を表示中)

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

■23367 / inTopicNo.1)  2次元配列  Redimについて
  
□投稿者/ 初心者 (105回)-(2008/08/13(Wed) 11:23:52)

分類:[.NET 全般] 

2次元配列をつかって名前 性別 年齢をそれぞれ登録する
デザインは テキストボックス3つ  ボタン1つ

Public Class Form1
Dim x As Integer

Dim a(0, 2) As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
a(x, 0) = TextBox1.Text
a(x, 1) = TextBox2.Text
a(x, 2) = TextBox3.Text

x = x + 1
ReDim Preserve a



End Sub
End Class
までかきましたがredimをつかって名前 性別 年齢のサイズをふやしたいのですがどおしればいいでしょうか・・・・
説明へたくそですがよろっしくおねがいします
vb2005つかっています
引用返信 編集キー/
■23369 / inTopicNo.2)  Re[1]: 2次元配列  Redimについて
□投稿者/ επιστημη (1233回)-(2008/08/13(Wed) 11:36:02)
επιστημη さんの Web サイト
> までかきましたがredimをつかって名前 性別 年齢のサイズをふやしたいのですがどおしればいいでしょうか・・・・

どーもこーもないんぢゃないかと。

ReDim a(30,3)
とかなんとかすりゃえぇです。

# だからね、"なにがわからんのか"が伝わらんのですよ。

引用返信 編集キー/
■23370 / inTopicNo.3)  Re[1]: 2次元配列  Redimについて
□投稿者/ もょもと (22回)-(2008/08/13(Wed) 11:36:19)
動的配列
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard27.htm
引用返信 編集キー/
■23371 / inTopicNo.4)  Re[2]: 2次元配列  Redimについて
□投稿者/ 初心者 (106回)-(2008/08/13(Wed) 11:47:04)
No23369 (επιστημη さん) に返信
>>までかきましたがredimをつかって名前 性別 年齢のサイズをふやしたいのですがどおしればいいでしょうか・・・・
>
> どーもこーもないんぢゃないかと。
>
Public Class Form1
Dim x As Integer

'Dim a(2,0) As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'a(0,x) = TextBox1.Text
'a(1,x) = TextBox2.Text
'a(2,x) = TextBox3.Text

'x = x + 1
'ReDim Preserve a(2, x)
でなんとかいきました
説明苦手のいぜんのもんだいですね・・・・・
でなおしてきます・・・・
引用返信 編集キー/
■23373 / inTopicNo.5)  Re[3]: 2次元配列  Redimについて
□投稿者/ επιστημη (1235回)-(2008/08/13(Wed) 11:51:51)
επιστημη さんの Web サイト
> 説明苦手のいぜんのもんだいですね・・・・・

ですね。説明しようとしてませんから。

引用返信 編集キー/
■23375 / inTopicNo.6)  Re[4]: 2次元配列  Redimについて
□投稿者/ もょもと (23回)-(2008/08/13(Wed) 12:00:50)
このトピックの質問者さんは、No23199の質問者さんと同じ方だと思いますが、
前の質問の時に比べれば、質問の仕方は改善されたと思いますよ。
プログラムを学ぶ者同士、お互い少しずつ成長していきましょうね。

それから…問題が解決された場合は、解決済みにチェックを入れて下さいね。
解決済みになっていないと、閲覧者はその問題が未解決なのかと思ってしまいます。
引用返信 編集キー/
■23376 / inTopicNo.7)  Re[2]: 2次元配列  Redimについて
□投稿者/ よねKEN (9回)-(2008/08/13(Wed) 12:05:00)
2008/08/13(Wed) 12:06:00 編集(投稿者)

To:επιστημη さん
> ReDim a(30,3)
> とかなんとかすりゃえぇです。

Redimで変更できるのは、最も右側のインデックスのサイズだけなので、
そういうことはできません。

2次元配列のままなんとかしようとした場合の答えは、
No23371 で提示されている初心者さんの自己レスの通りです。


To:初心者さん

強引に2次元配列のままで済まそうとするより、
名前、性別、年齢を保持するクラスを定義して、このクラスの1次元配列にする方がよいと思います。
さらに言えば、要素の数を動的に増やしたいような場合は、System.Collections.Generic.List(Of T)クラスなどのリスト
を使った方がよりよいでしょう。


引用返信 編集キー/
■23377 / inTopicNo.8)  Re[3]: 2次元配列  Redimについて
□投稿者/ επιστημη (1236回)-(2008/08/13(Wed) 12:09:48)
επιστημη さんの Web サイト
>>ReDim a(30,3)
>>とかなんとかすりゃえぇです。
>
> Redimで変更できるのは、最も右側のインデックスのサイズだけなので、
> そういうことはできません。

ヒギィ...失礼しましたー orz

> 強引に2次元配列のままで済まそうとするより、
> 名前、性別、年齢を保持するクラスを定義して、このクラスの1次元配列にする方がよいと思います。

ですね。そもそも性別/年齢をStringで持つこと自体不自然で。

引用返信 編集キー/
■23380 / inTopicNo.9)  Re[4]: 2次元配列  Redimについて
□投稿者/ 初心者 (107回)-(2008/08/13(Wed) 13:09:41)
No23377 (επιστημη さん) に返信
> >>ReDim a(30,3)
> >>とかなんとかすりゃえぇです。
>>
>>Redimで変更できるのは、最も右側のインデックスのサイズだけなので、
>>そういうことはできません。
>
> ヒギィ...失礼しましたー orz
>
>>強引に2次元配列のままで済まそうとするより、
>>名前、性別、年齢を保持するクラスを定義して、このクラスの1次元配列にする方がよいと思います。
>
> ですね。そもそも性別/年齢をStringで持つこと自体不自然で。
>
すみません::
色々と失礼をいたしました:
説明がまったくつたわってないのでしかたないことですよね・・・・
いちおこれでかいけつできたので
それと色々違う方法もためしてでなおしてきます

ありがとうございました。。
解決済み
引用返信 編集キー/
■23386 / inTopicNo.10)  Re[3]: 2次元配列  Redimについて
□投稿者/ 魔界の仮面弁士 (811回)-(2008/08/13(Wed) 14:04:35)
2008/08/13(Wed) 14:04:44 編集(投稿者)

No23376 (よねKEN さん) に返信
> To:επιστημη さん
>>ReDim a(30,3)
>>とかなんとかすりゃえぇです。
> Redimで変更できるのは、最も右側のインデックスのサイズだけなので、
> そういうことはできません。
それはあくまで、ReDim Preserve の場合であって、
ReDim であれば、自由に変更することができます。

> List(Of T)クラスなどのリスト
> を使った方がよりよいでしょう。
同意。
解決済み
引用返信 編集キー/
■23387 / inTopicNo.11)  Re[4]: 2次元配列  Redimについて
□投稿者/ よねKEN (10回)-(2008/08/13(Wed) 14:16:43)
2008/08/13(Wed) 14:17:03 編集(投稿者)
No23386 (魔界の仮面弁士 さん) に返信
> 2008/08/13(Wed) 14:04:44 編集(投稿者)
>
> ■No23376 (よねKEN さん) に返信
>>To:επιστημη さん
> >>ReDim a(30,3)
> >>とかなんとかすりゃえぇです。
>>Redimで変更できるのは、最も右側のインデックスのサイズだけなので、
>>そういうことはできません。
> それはあくまで、ReDim Preserve の場合であって、
> ReDim であれば、自由に変更することができます。

ぐはっ、失礼しました・・・orz
επιστημη さんのコメントにはPreserveがなかったですね。
見落としてました。

そして、フォローありがとうございます。>魔界の仮面弁士さん
解決済み
引用返信 編集キー/
■23388 / inTopicNo.12)  Re[5]: 2次元配列  Redimについて
□投稿者/ επιστημη (1239回)-(2008/08/13(Wed) 14:23:23)
επιστημη さんの Web サイト
2008/08/13(Wed) 14:33:30 編集(投稿者)

>>それはあくまで、ReDim Preserve の場合であって、
>>ReDim であれば、自由に変更することができます。
>
> ぐはっ、失礼しました・・・orz
> επιστημη さんのコメントにはPreserveがなかったですね。
> 見落としてました。

ぃゃぃゃぃゃぃゃ。

元々の質問は「データの入力と追加を繰り返してハコが足りなくなったらどーしましょ?」
ってことだろぉと解釈しました。
格納されてるデータを温存しつつハコ数を増やしたいんだろうと。

なので僕のReDimはPreserveを含意してました。
# てゆっか、僕の手馴れたC++にはReDimみたいな気の利いた再確保機構を
# 持ち合わせていないので、"ちょっと大きメのハコ用意して詰め替えればぁ?"
# くらいのキモチです ^^;

次元数を変えなければ縦でも横でも伸ばし放題かと思ってたです。

■■■
■■■



■■■□□
■■■□□
□□□□□

ってなれるとばっかり。

解決済み
引用返信 編集キー/
■23390 / inTopicNo.13)  Re[6]: 2次元配列  Redimについて
□投稿者/ 魔界の仮面弁士 (812回)-(2008/08/13(Wed) 14:59:12)
2008/08/13(Wed) 15:09:17 編集(投稿者)

No23388 (επιστημη さん) に返信
> 次元数を変えなければ縦でも横でも伸ばし放題かと思ってたです。
> ■■■
> ■■■
> が
> ■■■□□
> ■■■□□
> □□□□□
> ってなれるとばっかり。

配列内の各項目は、メモリ上の連続した位置に配置されますが、
2 次元配列の場合、それは下記のようなイメージで配置されます。


《配列指定が(2, 1)の時》
00, 01, 02,
03, 04, 05


《配列指定が(2, 3)の時》
00, 01, 02,
03, 04, 05,
06, 07, 08,
09, 10, 11


《配列指定が(4, 3)の時》
00, 01, 02, 03, 04,
05, 06, 07, 08, 09,
10, 11, 12, 13, 14,
15, 16, 17, 18, 19


1 次元目の値を変更してしまうと、メモリの再配置が必要になってしまいます。そのため、
言語仕様上、Preserve で動かせるのは 2次元目(最右側の次元)のみに制限されているのだとか。
http://support.microsoft.com/kb/75517/ja

もっとも、内部的には別の大きさの配列を用意して、そこに元のデータを
コピーしているのだけなのですけれどね。(VB6 でも VB.NET でも)

# 理論上は、そのコピーの手間さえ増やせば、任意の次元サイズを変更できるのだから、
# 将来のVB では、Preserve の制限を外して欲しいなぁとか思ってみたり。
## とはいえ、最近は System.Collections 配下のクラスを使えば済む事が多いので、
## 個人的には今の制限のままでも、ちっとも困らないというのも事実なのだけれど。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -