Integerの配列に (例として)FormのWidthプロパティの値を代入
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/5/2 21:41:00
> Dim Int(5) As Integer
> Dim Form(5) As New Form
「Int関数」や「Formクラス」と名前が競合しているので、変数名を見直すことをお奨めします。
(不正な変数名というわけでは無いので、使えないわけでは無いのですけれども)
> と(まぁ 意味のない)コードがあったとして
そもそも二番目の宣言は、(たとえ変数名を変えても)文法エラーになりますよね。
最終的にやりたいことは何ですか?
(a) Form インスタンスを 1 つ作り、それを要素数 5 の一次元配列変数に格納する。
(b) Form インスタンスを 5 つ作り、それを要素数 5 の一次元配列変数に格納する。
(c) Form の配列は既にあるものとして、そこからそれぞれの Width を抜き出した配列を作る。
> ループを使わずに代入したいのですが
ループを使いたくない理由は何ですか?
> ここまで読んでも なんのことかよくわからないですよね・・・
とりあえず上記(c) なら:
> Dim Form(5) As New Form
「Int関数」や「Formクラス」と名前が競合しているので、変数名を見直すことをお奨めします。
(不正な変数名というわけでは無いので、使えないわけでは無いのですけれども)
> と(まぁ 意味のない)コードがあったとして
そもそも二番目の宣言は、(たとえ変数名を変えても)文法エラーになりますよね。
最終的にやりたいことは何ですか?
(a) Form インスタンスを 1 つ作り、それを要素数 5 の一次元配列変数に格納する。
(b) Form インスタンスを 5 つ作り、それを要素数 5 の一次元配列変数に格納する。
(c) Form の配列は既にあるものとして、そこからそれぞれの Width を抜き出した配列を作る。
> ループを使わずに代入したいのですが
ループを使いたくない理由は何ですか?
> ここまで読んでも なんのことかよくわからないですよね・・・
とりあえず上記(c) なら:
Dim I() As Integer = フォーム配列.Select(Function(f) f.Width).ToArray()
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/5/2 21:58:20
極力、元の変数宣言に合わせてみました。
これが「やりたいこと」に合致しているかどうかは分かりませんが…。
Dim Form() As Form = Enumerable.Range(1, 5).Select( _
Function(n) New Form() With {.Text = "Form" & CStr(n)}).ToArray()
Dim Int() As Integer = Form.Select(Function(f) f.Width).ToArray()
これが「やりたいこと」に合致しているかどうかは分かりませんが…。
投稿者 shu  (社会人)
投稿日時
2012/5/2 23:22:23
再帰を利用する方法
要素数増えると大変です。
要素数増えると大変です。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fm() As Form = {Form2, Form3, Form4}
Dim w(fm.Length - 1) As Integer
SetWidth(fm, w, 0)
End Sub
Private Sub SetWidth(ByVal fm() As Form, ByVal w() As Integer, ByVal index As Integer)
If index < fm.Length Then
w(index) = fm(index).Width
SetWidth(fm, w, index + 1)
End If
End Sub
投稿者 bz9  (中学生)
投稿日時
2012/5/3 10:34:17
魔界の仮面弁士さんへ
> > と(まぁ 意味のない)コードがあったとして
> そもそも二番目の宣言は、(たとえ変数名を変えても)文法エラーになりますよね。
あ・・・ 配列に Newはできませんでしたね^^;
>最終的にやりたいことは何ですか?
やりたかったのは (c)です。
> > ループを使わずに代入したいのですが
> ループを使いたくない理由は何ですか?
ゲームを作っていて ループを使うと速度が遅くなってしまうからで
ループ以外の方法があるのかわからなかったからです
うまく説明できなかったのでFormを使ったということです。
shuさんへ
再帰を利用する方法も使ってみようと思います
再帰はあまり使わないので考えていませんでした
ありがとうございました。
> > と(まぁ 意味のない)コードがあったとして
> そもそも二番目の宣言は、(たとえ変数名を変えても)文法エラーになりますよね。
あ・・・ 配列に Newはできませんでしたね^^;
>最終的にやりたいことは何ですか?
やりたかったのは (c)です。
> > ループを使わずに代入したいのですが
> ループを使いたくない理由は何ですか?
ゲームを作っていて ループを使うと速度が遅くなってしまうからで
ループ以外の方法があるのかわからなかったからです
うまく説明できなかったのでFormを使ったということです。
shuさんへ
再帰を利用する方法も使ってみようと思います
再帰はあまり使わないので考えていませんでした
ありがとうございました。
投稿者 bz9  (中学生)
投稿日時
2012/5/3 10:35:05
解決チェック忘れてました
投稿者 YuO  (社会人)
投稿日時
2012/5/4 01:42:04
解決となっていますが……。
LINQは内部的にループを使いますし,再帰はループより大抵遅くなります。
まずは本当に対象のループが問題であるのかを計測によって調べ,
本当に速度が問題であれば
・ループ中での不要な処理を避ける
・データ構造を速度が出るように変える
などの処置をするのがよいかと思います。
LINQは内部的にループを使いますし,再帰はループより大抵遅くなります。
まずは本当に対象のループが問題であるのかを計測によって調べ,
本当に速度が問題であれば
・ループ中での不要な処理を避ける
・データ構造を速度が出るように変える
などの処置をするのがよいかと思います。
例えば
と(まぁ 意味のない)コードがあったとして
Int配列に FormのWidthプロパティの値を出来ればループを使わずに代入したいのですが
Googleでいろいろ調べてみているのですが全くわかりません
ループを使えば すぐできるのですが・・・
ここまで読んでも なんのことかよくわからないですよね・・・