• ベストアンサー

キーが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

  • javaのhashtableに関する質問です

    以前にも質問させていただいた者ですが、またどなたかよろしくお願いします。  javaのhashtableを使いたいのですが、ソースコードの中で int a[]= char b[]= Hashtable<int,char> hash=new Hashtable<int,char>();       ~ hash.put(int[a],char[b]); と、put(,)の中にint型とchar型の配列を格納することは可能でしょうか?どうしてもエラーが出てしまいます。   どうしたらいいのでしょうか?

  • キーの2文字目を無視してひもづけるには?

    2つのテーブル(A、B)を結合してデータを取得したいのですが、 TableBのキーの2文字目を無視して検索したいのです。 例) テーブルA テーブルB キー 値 キー 値 1001 1 1101 1 1002 2 1012 2 1003 3 1003 3 1004 4 1104 4 1202 5 1303 6 結果 キー  A.値   B.値 1001 1 1 1002 2 5 1003 3 3 1003 3 6 1004 4 4 以下のSQL文を作ってみたのですが、 時間が非常にかかってしまうので よい方法を知りたく思っています。 SELECT A.キー, A.値, B.値 FROM テーブルA INNER JOIN テーブルB ON A.キー = LEFT(B.キー,1) + SUBSTRING(A.キー, 1, 1) + RIGHT(B.キー, LEN(B.キー) - 2) よろしくお願いします。

  • javaのエラーに関する質問 よろしくお願いします

     こんにちは。どなたかJavaのエラーに詳しい方はどうか教えていただけないでしょうか?本にも載ってなくて、調べようがないので困っています。  エラーの内容は    注 ~の操作は未チェックまたは安全ではありません  注 詳細については -xlint:unchechkedオプションを指定して再コンパイルしてください。    と表示されてしまいます。ソースコードの中に  Hashtable ht=new hashtable(); ~  ht.put( , ); とHashtableを使い、put()に値を入れて実行すると注~のようなエラーが出てしまいます。 全くわかりません。なにをすればいいのでしょうか?どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • 作曲 キー を変える

    ギターで作曲していますが基本、キーはC、G、D、Aなどでしています。 でもバンドスコアを見たりするとE、F、B♭、E♭、A♭などギターで作曲するものとしては作曲しにくいキーだと思います(人によりますが) なぜキーをE、F、B♭、E♭、A♭などでするのでしょうか? 歌いやすくするためだけでしょうか?それともコードの響きやメロディが良くなるのでしょうか? C、G、D、Aキーで良いじゃんと思います。 よろしくおねがいします。

  • SQL文のロジックについて

    SQLの初心者ですので具体的な例でお答えいただければうれしいです a  char(13)   の中に ’099-222-5678 ’ と入ってるとします ’-’の場所は不定です aの値を、’099’、’222’、’5678’に分けるときは どのように記述したら良いのですか? もうひとつ・・・ AというファイルのKEYが、社員コード、連番で内容が名前 社員コード、連番、名前 とあるとして 1社員コードに対して連番が10件存在する・・・として 名前は連番に対してあると思います そこで、名前がSPACEでかつ連番が一番小さいデータを一件 だけ抽出するにはどんなWHEREかけばよろしいのですか? よろしくお願いします

  • 主キーの変更

    次のようなテーブルが存在します。レコードはあくまで参考の値です。主キーについては必ず一意の値になるようにしています。 代理店sample1がIDを紛失し、再発行を依頼された場合や,その下の顧客店やこきゃくがIDを紛失し、再発行をする場合に既存のデータをそのまま保持したまま主キーだけを変更して関連された他のテーブルに一斉に反映させるにはどうすればよいでしょうか? ここには記載していませんが顧客店IDやこきゃくIDに関連する別テーブルが10ほど存在します。 主キーが存在するレコードと重複していないかをまずチェックしてそこから基礎となるテーブルに書き換えを行いと考えているのですが、思考がそこで止まってしまっています。 よろしければアドバイスをよろしくお願いいたします。 代理店テーブル |代理店ID(主キー) |代理店名| |        aaaaa | sample1| |        bbbbb | sample2| 顧客店テーブル |代理店ID(主キー) |顧客店ID(主キー)|顧客店名| |        aaaaa |      a-00001| ○○1店| |        aaaaa |      a-00002| ○○2店| |        bbbbb |      b-00001| △△1店| |        bbbbb |      b-00002| △△2店| 顧客テーブル |顧客店ID(主キー) |      こきゃくID(主キー)| こきゃく名| |        a-00001|    a-20071015-00001| Aさん   | |        a-00002|    a-20071015-00002| Bさん   | |         b-00001|     b-20050915-00001| Cさん   | |        b-00002|    b-20050915-00002| Dさん   |

  • Excelの値取得関数について

    Excelで表を作成する際、コードから値を取得する方法について教えてください。 以下のようなことをやりたいです。 画像の場合、 1. 社員コードに"A001"を入力。 2. 各マスタの領域にある値を取得し、検索結果の各セルに値を表示。  ※B5,B6 の部分に値を取得する関数を設定したいです。 社員名は、C4のセルに記載したような、VLOOKUPで値を取得できました。 出身地と所属部署を取得する場合、 VLOOKUP に VLOOKUP を入れるような形で ないと取得できないのでしょうか。 ※出身地  社員コード"A001" をキーに社員マスタから出身地"T001"を取得し、地方マスタより、"青森県"を取得したいです。 ※所属部署   社員コード"A001" をキーに社員マスタから所属部署"S001"を取得し、部マスタより、"総務部"を取得したいです。 アドバイスをお願いします。

  • Perlでハッシュや配列で重複するキーについて

    ハッシュで重複するキーが値となるので、このハッシュはabdの3つのキーしか存在しないということでしょうか? %a = ('a'=>1, 'b'=>2, 'a'=>3, 'd'=>4); また、配列の場合はabadと4つ数になるということでしょうか? @a = ('a','b','a','d'); この場合配列で、重複する値を抽出するアルゴリズムが知りたいです。

    • ベストアンサー
    • Perl
  • Excel 複数シートで、違う行にある値をキー項目を元に集計したい。

    Excelを使用した集計作業で、効率の悪さに頭を悩ませています。 自己解決出来ず、お知恵を拝借出来ればと質問させていただきます。 シートA・Bに同じ構造(列の項目数が一致)のデータを持っています。 A・B両方に入力されているキー項目のデータもあれば、 どちらかのみに登録されているキー項目のデータもあります。 2つのシートで一致するキー項目の値を集計し、 シートCに出力する事を考えています。 A・B両方に入力されている場合は各値を合計し、 片方にしか登録されていない場合はそのまま値を表示したいのですが、 効率の良い手順がわかりません。是非お助け下さい! 具体的には、下記のような事を考えています。 【シートA】 キー項目 値1 値2 値3 値4 A001  10  10  10  10 A002  20  20  20  20 A003  30  30  30  30 A004  40  40  40  40 A005  50  50  50  50 A006  60  60  60  60 【シートB】 キー項目 値1 値2 値3 値4 A001  10  10  10  10 A002  20  20  20  20 A005  50  50  50  50 A007  70  70  70  70 A008  80  80  80  80 ↓ 【シートC】 キー項目 値1 値2 値3 値4 A001  20  20  20  20 A002  40  40  40  40 A003  30  30  30  30 A004  40  40  40  40 A005  100  100  100  100 A006  60  60  60  60 A007  70  70  70  70 A008  80  80  80  80 p.s. 現在は下記のような手順で作業しています。 (1)MATCH関数でシートBのキー項目がシートAの何行目にあるかを出力。 (2)手作業で出力された行にデータを移動し、キー項目の行数を合わせる。 (3)シートCにキー項目をコピーし、  値部分は『='シートA'!B1+'シートB'!B1』のような形で計算。 (4)シートBにのみ存在するデータを結合→キー項目でソート ・・・(2)の手順で、非常に時間を要しています(x_x)

  • SQLで質問があります。

    すみません。初めて質問させて頂きます。 以下のような条件のSQL生成は可能でしょうか。 可能な場合どのようなSQLになるかご教授頂けないでしょうか。 <条件> テーブルA,B,Cで一致する社員コード AND テーブルAの年月日がnull AND テーブルBの区分コードが"01"以外 AND テーブルCの部門コードでテーブルDを検索し 取得した会社コードが"00001" <取得したい項目> テーブルA.社員コード テーブルA.社員氏名 テーブルC.区分コード <テーブルA> 社員コード* 会社コード 年月日 社員氏名 <テーブルB> 社員コード* 会社コード 区分コード <テーブルC> 社員コード* 会社コード 部門コード <テーブルD> 会社コード* 部門コード* *は主キー よろしくお願い致します。

CDに直接印刷する方法
このQ&Aのポイント
  • CDに直接印刷する方法のご紹介
  • Windows11でのCDに直接印刷する方法
  • 無線LAN経由でCDに直接印刷する方法
回答を見る