tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: Queueを配列の様に使いたい
投稿日: 2019/12/26(Thu) 10:41
投稿者魔界の仮面弁士
> キューQueueを配列の様に使ってジャグ行列を作成したいのです。

格納するデータが文字列であるのなら、
  Dim War0 As New Queue
ではなく、ジェネリック実装な
  Dim War0 As New Queue(Of String)()
を採用することを強くおすすめします。整数なら、
  Dim War0 As New Queue(Of Integer)()
です。


.NET 2.0 以降でコレクションを利用する場合、ジェネリック版を使うことが望ましいです。

・ArrayList ではなく、List(Of T) を使う
・Hashtable ではなく、Dictionary(Of TKey, TValue) を使う
・Queue ではなく、Queue(Of T) を使う
・Stack ではなく、Stack(Of T) を使う




> Dim YS As String()() = New String(1)() {}   '2行のジャグ行列
> YS(0) = New String(War0.Count - 1) {}       '1行目初期化 配列個数
> For NCou = 0 To War0.Count - 1
>     YS(0)(NCou) = War0.Dequeue()                 '順番に取り出す
> Next
> YS(1) = New String(War1.Count - 1) {}       '2行目初期化
> For NCou = 0 To War1.Count - 1
>     YS(1)(NCou) = War1.Dequeue()
> Next

拡張メソッドを使えば、ループさせずとも同じ結果を得られます。

たとえば War0 や War1 が Queue(Of String) 型だとしたら、
  Dim YS()() As String = {War0.ToArray(), War1.ToArray()}
あるいは
  Dim YS As String()() = {War0.ToArray(), War1.ToArray()}
の一行だけで変換できます。
War0 や War1 が Queue(Of Integer) 型の場合は、上記の String を Integer に置き換えるだけ。


なお、ToArray() で取り出した場合には Dequeue されません。
ジャグ配列に変換した後、キューの中身を空にしておきたいなら、
最後に、War0.Clear() を呼び出しておきましょう。


> これがもっと多い数を相手にするとなるとコードを書ききれません。

下記を実行すると YS(0) には 2 の倍数、YS(1) には 3 の倍数、YS(N) には N+2 の倍数が 100 個ずつ入ります。

Dim lst As New List(Of List(Of Integer))()
For x = 2 To 1000
    Dim y = x
    Dim z As New List(Of Integer)()
    Do Until z.Count >= 100
        z.Add(y)
        y += x
    Loop
    lst.Add(z)
Next

Dim YS As String()() = lst.Select(Function(a) a.Select(Function(b) b.ToString()).ToArray()).ToArray()

' YS(0) は { "2", "4", "6", …, "200" }
' YS(1) は { "3", "6", "9", …, "300" }
' YS(2) は { "4", "8","12", …, "400" }
' :
'YS(996) は { "998", "1996","2994", …, "99800" }
'YS(997) は { "999", "1998","2997", …, "99900" }
'YS(998) は { "1000", "2000","3000", …, "100000" }

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。