1

各キーが私が作成した名前であり、各項目が 3 つのオブジェクトの配列である辞書を作成しようとしています: 文字列、整数、および SOAP 要求からの結果の配列。

次のように配列を初期化します。

Dim riskDict As New Scripting.Dictionary
riskDict.Add "Weight", Array("WP", 0, Array())

そして、X x 4 の配列を返す関数「getTheRisk」があります (これは SOAP 要求です。返される結果の数はわかりませんが、結果ごとに 4 つの値が返されます)。

その結果を辞書の項目の 3 番目の要素に格納したいと思います。次のように試みます。

For i = 0 To riskDict.count - 1
  riskDict.Items(i)(2) = getTheRisk(myDate.Value, myPort.Value, riskDict.Items(i)(0))
Next i

これはコンパイルして正常に実行されますが、配列を割り当てた後、辞書に空として表示されます。

ここに画像の説明を入力

getTheRisk 関数は、次のようなものを返します。

ここに画像の説明を入力

dict の配列を SOAP リクエストの結果に設定するにはどうすればよいですか?

4

1 に答える 1

0

回避策を見つけました。2 つの要素だけで項目を初期化し、SOAP 要求を送信して結果を取得するときに、3 つ目の要素を調整して追加します。次のように初期化します。

Dim riskDict As New Scripting.Dictionary
riskDict.Add "Weight", Array("WP", 0)

そして私のループのために:

For Each key In riskDict
  temp = riskDict(key)
  ReDim Preserve temp(UBound(temp) + 1)
  temp(UBound(temp)) = getTheRisk(myDate.Value, myPort.Value, riskDict(key)(0))
  riskDict(key) = temp
Next key

redim が保存されるため、これは理想的とは言えません。(そして、あまりエレガントに見えません。) ただし、この dict の長さは約 8 ~ 10 項目にすぎないため、パフォーマンスに大きな影響を与えることはありません。

より良い解決策がある場合は、お気軽にコメントまたは投稿してください。

皆さんありがとう!

于 2015-12-29T16:43:50.210 に答える