• ベストアンサー

キーが2つのHashTable

いつもお世話になっております。 VB2003でHashTableのような感じでキーを2つつけられるコレクションを探しています。 普通のHashTable(キーが1つ) 社員コード(キー) 名前(値) ---------------------- 000001      あいうえお 000002      かきくけこ 000003      さしすせそ これを… 今回探しているコレクション(キーが2つ) 会社名 社員コード 名前 ------------------------------- 会社A 0000001   あいうえお 会社B 0000001   たちつてと 会社A 0000002   かきくけこ 会社A 0000003   さしすせそ 会社B 0000002   なにぬねの というようにしたいのですが、 このようにキーが2つで値を取り出せるコレクションはあるのでしょうか? それとも自分でコレクションを作らないとダメなのでしょうか? もし作らないといけないようでしたら、参考にソースなど提示していただけるとありがたいです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#259269
noname#259269
回答No.2

普通こういう時は、会社名と社員コードを文字列連結して、キーとして使いますねぇ。このとき、会社名の末尾にも社員コードの先頭にも絶対に使われない文字を使って連結すると間違いがないでしょう。 例) hash.Add(companyName + vbTab + userCode, userName) 以下蛇足。 こういう事を自力で考えだせるかどうかが、今後業界でやっていく上で 大事だと思うので、質問するのも良いですが、自力で工夫する事も検討してみてください。長い目で見た時に自分の力になっていくと思いますよ。頑張ってください。

その他の回答 (2)

回答No.3

HashTableにHashTableを突っ込むとか! 使い勝手がいいかどうかは考えてません。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ん~ どのような使い方をされるんでしょう? 会社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') といった具合で ・・・

関連するQ&A

専門家に質問してみよう