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

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

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

Re[2]: Directory内のデータの扱い方


(過去ログ 123 を表示中)

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

■73533 / inTopicNo.1)  Directory内のデータの扱い方
  
□投稿者/ もえ (3回)-(2014/10/07(Tue) 14:13:06)

分類:[VB.NET/VB2005 以降] 

以前、73316 日時をユニークにしたバッファの作成 で、質問しました件の追加質問です。
73318 で、サンプルをご教授頂き、それを元に作成しました。
着手が遅くなってしまいましたが、何とか形になってきました。

仕様変更などもあり当初と少々変ってしまいましたが、基本仕様は同じです。

全ては掲載できないので、部分のみ抜粋しました。
下記のコーディングで希望のデータが DirResult に入っています。
しかし、ソートとデータの取り出し方がよく分かりません。

どうぞよろしくお願い致します。


Q1.
サンプルで、↓のように教えて頂いたので、同じように真似てみました。
しかし、この 行 が何を指すのか、よく分かりません。

Dim 最終結果 = From 行 In 集計結果 Order By 行.Key Select String.Join(",", 行.Value)

実コーディング
Dim dirWrite = From 行 In DirResult Order By 行.Key Select String.Join(",", 行.Value)


Q2.
現在、データが次のような形で入っています。
これを、For文などで9個のデータを表示するためには、どのように記述すればよいのでしょうか?

DirResult(0)(1)と書けば、23.2 が参照できるかと思っていたのですが、そうではないようです。
いろいろ試してみましたが、参照方法が分かりません。


Q3.
3つの日時は、DirResult.Count で数が求まりますが、横方向の <日時 A室 B室> の個数はどのように取得することができるのでしょうか?


日時 A室 B室

2014/09/30 18:00:00 23.2 11.2
2014/09/30 19:04:00 22.9 13.2
2014/10/01 12:33:33 21.4 11.8



'----------------------------------------------------------
' Directoryの作成
'----------------------------------------------------------
Dim DirResult As New Dictionary(Of String, String())

'省略


'Qualityの変換
For xxx = 0 To GetTagDataNumber - 1

If GetTagData(xxx).Quality <> "Good" Then GetTagData(xxx).ItemValue = "NA"

Dim strTimestampW = GetTagData(xxx).TimeStamp
Dim strValueW = GetTagData(xxx).ItemValue
Dim strResultW(CollectedVariablesNumber) As String

If DirResult.ContainsKey(strTimestampW) Then
strResultW = DirResult(strTimestampW) '既存行の取得
Else
strResultW = New String(CollectedVariablesNumber) {}
strResultW(0) = strTimestampW '0列目にはTimestampを格納
DirResult.Add(strTimestampW, strResultW)
End If

strResultW(ItemNumberCount) = strValueW
Next xxx

'省略

'DirResultを、日付順に並べる
Dim dirWrite = From 行 In DirResult Order By 行.Key Select String.Join(",", 行.Value)
引用返信 編集キー/
■73536 / inTopicNo.2)  Re[1]: Directory内のデータの扱い方
□投稿者/ Hongliang (239回)-(2014/10/07(Tue) 15:32:31)
前スレッドでも指摘が入っていましたが、Directoryディレクトリではなく、Dictionaryディクショナリです。

> Q1.
> しかし、この 行 が何を指すのか、よく分かりません。
> 
> Dim dirWrite = From 行 In DirResult Order By 行.Key Select String.Join(",", 行.Value)

// 以下はTKey, TValueを使う箇所がありますが、New Dictionary(Of String, String())の場合はそれぞれに読み替えてください。

DirResultに格納されている個々の要素です。
Dictionary(Of TKey, TValue)の個々の要素はKeyValuePair(Of TKey, TValue)型のオブジェクトです。
> DirResult.Add(strTimestampW, strResultW)
のようにしてDictionaryに格納していますが、このうちstrTimestampWをKeyとして、strResultWをValueとして持っています。

> Q2.
> 現在、データが次のような形で入っています。
> これを、For文などで9個のデータを表示するためには、どのように記述すればよいのでしょうか?

たとえば、次のようなのとか。
For Each key As String In DirResult.Keys
  Dim row As String() = DirResult(key)
  For Each value As String In row
    Debug.Print(value)
  Next
Next

> Q3.
> 3つの日時は、DirResult.Count で数が求まりますが、横方向の <日時 A室 B室> の個数は
> どのように取得することができるのでしょうか?

各行はString()であり、任意の要素数を持てる配列なので、純プログラミング的には行毎に個数は変わり得ます。
ただし実際の運用上各行における要素数はすべて同じであるなら、たとえばDirResult.First().Value.Lengthとかで取得できます。
// First()でDirResultの最初の要素KeyValuePair(Of String, String())を取得して、
// そのValueでString()を取得し、そのLengthプロパティを取得しています。
DirResultが空の場合はどうするか、という問題はあります。
というか、この場合は、DirResultからとらなくても、CollectedVariablesNumberを参照すれば良いんでは。

引用返信 編集キー/
■73538 / inTopicNo.3)  Re[2]: Directory内のデータの扱い方
□投稿者/ もえ (4回)-(2014/10/07(Tue) 19:33:17)
Hongliang さん

> 前スレッドでも指摘が入っていましたが、Directoryディレクトリではなく、Dictionaryディクショナリです。

ありがとうございます。
お礼の後に見てませんでした。
ずっとDirectoryと勘違いしていたので、いくら検索してもHitしなかったのですね。
よく分かりました。

Dictionaryの構造、使い方は、まだまだ???ですが、何とかデータを取り出し、欲しい形に加工ができました。

どうもありがとうございます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -