質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

12842閲覧

構造体配列の中身を、Forループなどで入れ込む方法は無いものでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

2クリップ

投稿2017/10/28 01:57

VB.netでのプログラミングで、構造体の中身を、上から順番にString配列に入れ込みたい場合など、今は、このように書いてしまっています。

Visual

1Public a IniList 2 Dim a1 As String 3 Dim a2 As String 4 Dim a4 As String 5End Structure 6 7Dim saAs b 8Dim b(3) As String 9Dim ii As Integer 10 11sa.a1 = "1" 12sa.a2 = "2" 13sa.a3 = "3" 14 15b(0) = sa.a1 16b(1) = sa.a2 17b(2) = sa.a3 18

これをなんとかForループなどを使って、

Public a IniList Dim a1 As String Dim a2 As String Dim a4 As String End Structure Dim saAs b Dim b(3) As String Dim ii As Integer sa.a1 = "1" sa.a2 = "2" sa.a3 = "3" For ii To 2 b(ii) = sa(ii) Next ii

構造体の中身をLoopで入れるなんてことは、出来ないものなのでしょうか?

もし上記のような事する場合は、構造体ではなくハッシュテーブルなどでしょうか?
ただ、ハッシュテーブルの場合は、項目名と値を結びつけてセットし、中身をForループで一覧で取り出すことはできたのですが、例えば、

Dim a As New Hashtable() Dim b(3) As String Dim ii As Integer a.Add("b", "1") a.Add("a", "2") a.Add("c", "3") ii = 0 For Each key As String In a.Keys b(ii) = a(key) ii = ii + 1 Next

このようにやると、結果として、Addした順番に

b(0) = "1" b(1) = "2" b(2) = "3"

と出てくれればいいのですが、この場合の結果は、ハッシュテーブル内で並び替えが行われるようで、

b(0) = "2" b(1) = "1" b(2) = "3"

と出てしまいます。

また、String配列に入れるために、わざわざiiを自分でインクリメントしないといけないのも、なんだかなぁという感じです。

こんな場合、何かいい方法はないものでしょうか?

理想は、構造体の中身を、構造体に定義した順番でループで入れ込む方法、またはハッシュテーブルの値をAddした順番に入れ込む方法です。

プロの方は、このような場合、どのようにしているものなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/10/28 03:18

なぜそれをやりたいんですか?目的によってはそもそも配列に入れ込むことが適切でない場合もあります。
退会済みユーザー

退会済みユーザー

2017/10/28 03:32

目的はロジックを書く効率化の為です。ただ、可能な限り効率を重視しつつ、人が見てわかりやすさも出来るだけ考慮したいので、やり方についていろいろと研究しています。単なる効率化だけなら、String配列だけでやってしまうとかもありだとは思うのですが、構造体であればメンバ変数名から内容を予測しやすいなどの利点もありますので。
KSwordOfHaste

2017/10/28 05:10

実際にどういう雰囲気の情報かや配列としてどういったことをしたいかを具体的に書かれてはいかがでしょう。より質問者さんの意図にマッチしたコメントが得られやすい気がします。
guest

回答1

0

ベストアンサー

こんな感じでしょうか

①自分で実装する
格納順を保持するディクショナリクラス
http://d.hatena.ne.jp/miau/20110203/1296706824

②IniListクラスに、プロパティをまとめて設定する関数を用意する

③リフレクションでやる

投稿2017/10/28 07:14

deigo

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/28 13:16

deigo様 おお!なるほど! 例えばこのような方法あるのですね~ 参考になりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問