dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
VB2003でHashTableのような感じでキーを2つつけられるコレクションを探しています。

普通のHashTable(キーが1つ)
社員コード(キー) 名前(値)
----------------------
000001      あいうえお
000002      かきくけこ
000003      さしすせそ

これを…

今回探しているコレクション(キーが2つ)
会社名 社員コード 名前
-------------------------------
会社A 0000001   あいうえお
会社B 0000001   たちつてと
会社A 0000002   かきくけこ
会社A 0000003   さしすせそ
会社B 0000002   なにぬねの

というようにしたいのですが、
このようにキーが2つで値を取り出せるコレクションはあるのでしょうか?
それとも自分でコレクションを作らないとダメなのでしょうか?
もし作らないといけないようでしたら、参考にソースなど提示していただけるとありがたいです。

よろしくお願いいたします。

A 回答 (3件)

普通こういう時は、会社名と社員コードを文字列連結して、キーとして使いますねぇ。

このとき、会社名の末尾にも社員コードの先頭にも絶対に使われない文字を使って連結すると間違いがないでしょう。
例)
hash.Add(companyName + vbTab + userCode, userName)

以下蛇足。
こういう事を自力で考えだせるかどうかが、今後業界でやっていく上で
大事だと思うので、質問するのも良いですが、自力で工夫する事も検討してみてください。長い目で見た時に自分の力になっていくと思いますよ。頑張ってください。
    • good
    • 0

HashTableにHashTableを突っ込むとか!



使い勝手がいいかどうかは考えてません。
    • good
    • 0

ん~ どのような使い方をされるんでしょう?



会社A 0000001 や 会社B 0000002 などのキーがワンセットでなら既存のCollectionクラスでいいでしょう

社員コード、会社名 など個別でキーとして使いたいのであれば
自作のCollectionをということになりそうです
# たぶん後者でしょうね

コレクションにこだわりがないのであれば DataSet/DataTableなどを使うのもひとつの方法でしょう

XML形式のファイルでデータを管理してDataSetのReadXml/WriteXmlで読み込み/保存が出来ます
DataSetのTablesからデータ本体をDataTableに取り出せます
DataTableのSelectメソッドで 任意の列に対してのフィルターもかけられます

' データの取り込み
dim ds as new DataSet
dim tbl as DataTable
Try
ds.ReadXml( "sample.xml" )
tbl = ds.Tables(0)
catch ex exception
tbl = new DataTable
tbl.columns.add("会社名")
tbl.Columns.add("社員コード")
tbl.columns.add("名前")
dim row as DataRow
row = tbl.NewRow
row("会社名") = "会社A"
row("社員コード") = "0000001"
row("名前") = "あいうえお"
tbl.rows.add( row )
' ここから
row = tbl.NewRow
row("会社名") = "会社B"
row("社員コード") = "0000001"
row("名前") = "かきくけこ"
tbl.rows.add( row )
' 必要な行数分繰り返す
ds.tables.add( tbl )
ds.WriteXml( "Sample.xml" )
end Try

' データの抽出
dim rows1() as DataRow
dim rows2() as DataRow
dim rows3() as DataRow
rows1 = tbl.Select("会社名='会社A'")
rows2 = tbl.Select("社員コード='0000001'")
rows3 = tbl.Select("会社名='会社A' AND 社員コード='0000001')

といった具合で ・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!