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

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

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

VB.NETで他クラスでの配列呼出方法が知りたい

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

■91710 / inTopicNo.1)  VB.NETで他クラスでの配列呼出方法が知りたい
  
□投稿者/ HYDE2019 (8回)-(2019/07/23(Tue) 18:30:14)

分類:[.NET 全般] 

VB.NETの初心者です、よろしくお願い致します。

あるデータをDictionaryで配列セットし、他のクラスでも使用するので共有化したいのですが、
Addしたデータを呼び出す方法が知りたいです。

キーを指定すれば抽出できるのは把握していますが、
やりたいのは、他のクラスでForEachなりを使って、セットされているhogeのDictionaryを
頭から順にキーとデータを抽出したいだけです。


Public Class Class1

Private hoge As New Dictionary(Of String, String)()

'↓思いつかないので、Functionを使ってみました
Public Function hogehoge() as Dictionaly( Of String, String)
Return Me.hoge() '←キーが無いと怒られてます
End Function

Public Sub Main()
hoge.Add("東京都","新宿区")
hoge.Add("埼玉県","さいたま市")
hoge.Add("神奈川県","横浜市")
hoge.Add("千葉県","千葉市")
hoge.Add("茨城県","水戸市")
hoge.Add("栃木県","宇都宮市")
hoge.Add("群馬県","前橋市")
End Sub

End Class


なるべくバグを出さないように直接アクセスを控えたく、
またオブジェクトを考え、クラス化としてみました。
(規模が解らないので、簡単に言ってるかもしれません。申し訳ありません。)

どうやってやればよいか、すいませんがご教授くださいますよう
よろしくお願い致します。

引用返信 編集キー/
■91711 / inTopicNo.2)  Re[1]: VB.NETで他クラスでの配列呼出方法が知りたい
□投稿者/ 魔界の仮面弁士 (2255回)-(2019/07/23(Tue) 19:00:28)
No91710 (HYDE2019 さん) に返信
> あるデータをDictionaryで配列セットし、

配列をセットする…というと、下記の b の意味でしょうか?

 Dim a As New Dictionary(Of String, String)()
 Dim b As New Dictionary(Of String, String())()


> やりたいのは、他のクラスでForEachなりを使って、セットされているhogeのDictionaryを
> 頭から順にキーとデータを抽出したいだけです。

For Each entry In yourDictionary
 Dim yourKey = entry.Key
 Dim yourValue = entry.Value
  :
  :
Next

もしくは Keys プロパティや Values プロパティを使うことも出来ます。


For Each yourKey In yourDictionary.Keys
 Dim yourValue = yourDictionary(yourKey)
  :
  :
Next
引用返信 編集キー/
■91713 / inTopicNo.3)  Re[2]: VB.NETで他クラスでの配列呼出方法が知りたい
□投稿者/ HYDE2019 (9回)-(2019/07/23(Tue) 21:34:37)
2019/07/23(Tue) 22:07:24 編集(投稿者)

No91711 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士さん、書き込みありがとうございます。
プロパティとの事で、こういう書き方であってますでしょうか?


Public Class Class1

 Private hoge As New Dictionary(Of String, String)()

 Public Property hogehoge() As String
  Get
   For Each entry As KeyValuePair In hoge()
    Dim Ken As String = entry.Key
    Dim City As String = entry.Value
    Return Format({"0" "1"},Ken ,City)
   Next
  End Get
 End Property

 Public Sub Main()
  hoge.Add("東京都","新宿区")
  hoge.Add("埼玉県","さいたま市")
  hoge.Add("神奈川県","横浜市")
  hoge.Add("千葉県","千葉市")
  hoge.Add("茨城県","水戸市")
  hoge.Add("栃木県","宇都宮市")
  hoge.Add("群馬県","前橋市")
 End Sub
End Class


すいませんが、よろしくお願い致します。



> ■No91710 (HYDE2019 さん) に返信
>>あるデータをDictionaryで配列セットし、
>
> 配列をセットする…というと、下記の b の意味でしょうか?
>
>  Dim a As New Dictionary(Of String, String)()
>  Dim b As New Dictionary(Of String, String())()
>
>
>>やりたいのは、他のクラスでForEachなりを使って、セットされているhogeのDictionaryを
>>頭から順にキーとデータを抽出したいだけです。
>
> For Each entry In yourDictionary
>  Dim yourKey = entry.Key
>  Dim yourValue = entry.Value
>   :
>   :
> Next
>
> もしくは Keys プロパティや Values プロパティを使うことも出来ます。
>
>
> For Each yourKey In yourDictionary.Keys
>  Dim yourValue = yourDictionary(yourKey)
>   :
>   :
> Next
引用返信 編集キー/
■91714 / inTopicNo.4)  Re[3]: VB.NETで他クラスでの配列呼出方法が知りたい
□投稿者/ PANG2 (315回)-(2019/07/23(Tue) 22:57:58)
No91713 (HYDE2019 さん) に返信
> Public Class Class1
>  Private hoge As New Dictionary(Of String, String)()
>  Public Sub Main()
>   hoge.Add("東京都","新宿区")

コンストラクタでしょう。
引用返信 編集キー/
■91717 / inTopicNo.5)  Re[3]: VB.NETで他クラスでの配列呼出方法が知りたい
□投稿者/ 魔界の仮面弁士 (2257回)-(2019/07/24(Wed) 00:02:15)
No91713 (HYDE2019 さん) に返信
> プロパティとの事で、こういう書き方であってますでしょうか?
いや、明らかに駄目でしょう。


> Public Property hogehoge() As String
>  Get
>   For Each entry As KeyValuePair In hoge()
>    Dim Ken As String = entry.Key
>    Dim City As String = entry.Value
>    Return Format({"0" "1"},Ken ,City)
>   Next
>  End Get
> End Proprty

(1) Property 内に Get ブロックしかありません。これではコンパイルエラーになるでしょう。
 Set ブロックも記述するか、または ReadOnly Property にすべきです。

(2) hoge はフィールド変数なので、後ろの丸括弧は余計です。これではコンパイルエラーとなるでしょう。
 括弧を外して In hoge もしくは In Me.hoge と記述してください。

(3) 列挙される型は As KeyValuePair ではありません。これではコンパイルエラーとなるでしょう。
 この場合は As KeyValuePair(Of String, String) です。というか As 句を省略した方が手っ取り早いです。

(4) ループ内で Return してしまったら、最初の一件目を返却しただけで終わってしまいます。
 エラーにはなりませんが、これでは列挙している意味がありません。
 複数件の県庁所在地情報を、どのような文字列として返すことを期待しているのでしょうか?

(5) hoge 内にデータが 0 件だった場合に、何を Return するかが明示されていません。
 自動的に Nothing が返されるのでエラーにはなりませんが、コンパイラ警告として報告されてしまうでしょう。

(6) Format 関数の使い方が出鱈目です。正しくは第一引数がデータ、第二引数が書式です。
 String.Format メソッドであれば、第一引数が書式、第二引数以降がデータ群ですが、
 いずれにせよダブルクォーテーションや波括弧の指定が間違っているので、コンパイルエラーとなるでしょう。



Public Class Class1
  Private hoge As New Dictionary(Of String, String)() From { _
    {"東京都", "新宿区"}, _
    {"埼玉県", "さいたま市"}, _
    {"神奈川県", "横浜市"}, _
    {"千葉県", "千葉市"}, _
    {"茨城県", "水戸市"}, _
    {"栃木県", "宇都宮市"}, _
    {"群馬県", "前橋市"} _
  }


  '列挙案1:イテレーターとして実装する
  Public ReadOnly Iterator Property Property1() As IEnumerable(Of String)
    Get
      For Each entry As KeyValuePair(Of String, String) In hoge
        Yield String.Format("{0}, {1}", entry.Key, entry.Value)
      Next
    End Get
  End Property

  '列挙案2:配列を返すプロパティとして実装する
  Public ReadOnly Property Property2() As String()
    Get
      Return hoge.Select(Function(e) $"{e.Key}, {e.Value}").ToArray()
    End Get
  End Property

  '列挙案3:改行で区切った文字列として返すよう実装する
  Public ReadOnly Property Property3() As String
    Get
      Dim sb As New System.Text.StringBuilder()
      For Each key In hoge.Keys
        sb.AppendLine(key & "の県庁所在地は" & hoge(key) & "です。")
      Next
      Return sb.ToString()
    End Get
  End Property
End Class
引用返信 編集キー/
■91719 / inTopicNo.6)  Re[4]: VB.NETで他クラスでの配列呼出方法が知りたい
□投稿者/ HYDE2019 (10回)-(2019/07/24(Wed) 08:46:16)
No91717 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士さん、返信ありがとうございました。
大変助かります。

(1) Property 内に Get ブロックしかありません。これではコンパイルエラーになるでしょう。
 Set ブロックも記述するか、または ReadOnly Property にすべきです。

 →ReaOnly付けるの忘れてました。ありがとうございます。

(2) hoge はフィールド変数なので、後ろの丸括弧は余計です。これではコンパイルエラーとなるでしょう。
 括弧を外して In hoge もしくは In Me.hoge と記述してください。

 →なるほど、了解しました。

(3) 列挙される型は As KeyValuePair ではありません。これではコンパイルエラーとなるでしょう。
 この場合は As KeyValuePair(Of String, String) です。というか As 句を省略した方が手っ取り早いです。

 →省略も出来るんですね。ありがとうございます。


(4) ループ内で Return してしまったら、最初の一件目を返却しただけで終わってしまいます。
 エラーにはなりませんが、これでは列挙している意味がありません。
 複数件の県庁所在地情報を、どのような文字列として返すことを期待しているのでしょうか?

 →呼び出しされたら、Arrayに入っている情報全てが出てくるのを期待していました。
  ただ、呼び出し方法含めてよくわからなくて。大変助かります。

(5) hoge 内にデータが 0 件だった場合に、何を Return するかが明示されていません。
 自動的に Nothing が返されるのでエラーにはなりませんが、コンパイラ警告として報告されてしまうでしょう。

 →なるほど、了解しました。

(6) Format 関数の使い方が出鱈目です。正しくは第一引数がデータ、第二引数が書式です。
 String.Format メソッドであれば、第一引数が書式、第二引数以降がデータ群ですが、
 いずれにせよダブルクォーテーションや波括弧の指定が間違っているので、コンパイルエラーとなるでしょう。

 →そうでしたね。Console.Writeベースで書いちゃってました。
  申し訳ありません、また、ありがとうございます。


列挙案1〜3も記載くださいまして、本当にありがとうございました。
自分がやりたいことに合致した方法と、もう少し勉強してやってみます。
全く分からなかったので、記載いただいて本当にうれしかったです。

また機会がありましたら、どうぞよろしくお願い致します。

本当にありがとうございました。




> ■No91713 (HYDE2019 さん) に返信
>>プロパティとの事で、こういう書き方であってますでしょうか?
> いや、明らかに駄目でしょう。
>
>
>>Public Property hogehoge() As String
>> Get
>>  For Each entry As KeyValuePair In hoge()
>>   Dim Ken As String = entry.Key
>>   Dim City As String = entry.Value
>>   Return Format({"0" "1"},Ken ,City)
>>  Next
>> End Get
>>End Proprty
>
> (1) Property 内に Get ブロックしかありません。これではコンパイルエラーになるでしょう。
>  Set ブロックも記述するか、または ReadOnly Property にすべきです。
>
> (2) hoge はフィールド変数なので、後ろの丸括弧は余計です。これではコンパイルエラーとなるでしょう。
>  括弧を外して In hoge もしくは In Me.hoge と記述してください。
>
> (3) 列挙される型は As KeyValuePair ではありません。これではコンパイルエラーとなるでしょう。
>  この場合は As KeyValuePair(Of String, String) です。というか As 句を省略した方が手っ取り早いです。
>
> (4) ループ内で Return してしまったら、最初の一件目を返却しただけで終わってしまいます。
>  エラーにはなりませんが、これでは列挙している意味がありません。
>  複数件の県庁所在地情報を、どのような文字列として返すことを期待しているのでしょうか?
>
> (5) hoge 内にデータが 0 件だった場合に、何を Return するかが明示されていません。
>  自動的に Nothing が返されるのでエラーにはなりませんが、コンパイラ警告として報告されてしまうでしょう。
>
> (6) Format 関数の使い方が出鱈目です。正しくは第一引数がデータ、第二引数が書式です。
>  String.Format メソッドであれば、第一引数が書式、第二引数以降がデータ群ですが、
>  いずれにせよダブルクォーテーションや波括弧の指定が間違っているので、コンパイルエラーとなるでしょう。
>
>
>
> Public Class Class1
>   Private hoge As New Dictionary(Of String, String)() From { _
>     {"東京都", "新宿区"}, _
>     {"埼玉県", "さいたま市"}, _
>     {"神奈川県", "横浜市"}, _
>     {"千葉県", "千葉市"}, _
>     {"茨城県", "水戸市"}, _
>     {"栃木県", "宇都宮市"}, _
>     {"群馬県", "前橋市"} _
>   }
>
>
>   '列挙案1:イテレーターとして実装する
>   Public ReadOnly Iterator Property Property1() As IEnumerable(Of String)
>     Get
>       For Each entry As KeyValuePair(Of String, String) In hoge
>         Yield String.Format("{0}, {1}", entry.Key, entry.Value)
>       Next
>     End Get
>   End Property
>
>   '列挙案2:配列を返すプロパティとして実装する
>   Public ReadOnly Property Property2() As String()
>     Get
>       Return hoge.Select(Function(e) $"{e.Key}, {e.Value}").ToArray()
>     End Get
>   End Property
>
>   '列挙案3:改行で区切った文字列として返すよう実装する
>   Public ReadOnly Property Property3() As String
>     Get
>       Dim sb As New System.Text.StringBuilder()
>       For Each key In hoge.Keys
>         sb.AppendLine(key & "の県庁所在地は" & hoge(key) & "です。")
>       Next
>       Return sb.ToString()
>     End Get
>   End Property
> End Class
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ