0

以下に示すように、スクリプト番号と患者IDをマップに保存するマップがあります。スクリプト番号は常に一意であるキーサインです。

Map m = new LinkedHashMap();
m.put ("123", "23"); 
m.put ("323", "23");
m.put ("153", "23");
m.put ("623", "23");
m.put ("125", "23");
m.put ("122", "24");
m.put ("167", "24");
m.put ("173", "24");
m.put ("113", "25");

ここでの質問は、患者 ID 23 に関連付けられているスクリプトの数を調べる必要があるということです。

上記でわかるように、合計 5 つの異なるスクリプトが患者 ID 23 で存在するため、異なるスクリプトの合計と、患者 ID 23 に関連付けられているスクリプト番号を計算する必要があります。これは 123,323,153,623,125 です。

例として値を示しましたが、私の状況では動的な値がマップに入力されるため、アドバイスしてください。

4

5 に答える 5

2

患者IDをカウントするためにマップする反対方向のマップが必要なようです。get新しいレコード、その患者のエントリを挿入するたびに、それをインクリメントします。

于 2013-01-09T17:30:33.667 に答える
1

LinkedHashMapが唯一のデータ構造である場合、これを行う唯一の方法は、それを反復処理し、すべての患者IDをと比較することです23

何らかの理由でこれが不十分な場合は、補助データ構造を構築できます。ただし、問題について詳しく知らずに、この方向に具体的な推奨事項を作成することは困難です。

于 2013-01-09T17:30:33.113 に答える
1

を繰り返すか、「患者ID」がキーで、値が「スクリプト番号」のリストでMapある場所を作成します。Map

    //Field to store the data in:
    Map<PatientId, List<ScriptId>> partientScriptMap = new HashMap<PatientId, 

    // method to add data
    void add(PatientId p, ScriptId s) {
        List<ScriptId> scriptIds = partientScriptMap.get(p);
        if (null == p) {
            scriptIds = new ArrayList<ScriptId>();
        }
        scriptIds.add(s);
        partientScriptMap.put(p, scriptIds);
   }

   // get all ScriptIds related to a PationId 
   List<ScriptId> getScriptIds(PatientId p) {
        return partientScriptMap.get(p);
   }

ScriptIdsとPatientIdsはすべて文字列ですか?上記のコードでこれらを次のように置き換えますString

    add("123", "23"); 
    add("323", "23");
    add("153", "23");
    add("623", "23");
    add("125", "23");
    add("122", "24");
    add("167", "24");
    add("173", "24");
    add("113", "25");


    System.out.println("scriptIds for 24: "+getScriptIds("24");
于 2013-01-09T17:31:20.570 に答える
0
int count = 0;
for (int i = 0; i < m.size(); i ++) {
    if (m.get(i) == 23) count ++;
}

ループして、各結果を23と照合するだけです。

于 2013-01-09T17:30:14.907 に答える
0

まず、ジェネリックを使用する必要があります。ジェネリックは操作がはるかに簡単です。

あとは、各キーを調べて、関連付けられた値が探しているものかどうかを確認するだけです。

Map<String, String> m = new LinkedHashMap<String, String>();
...

List<String> keys = new ArrayList<String>();
for(String str: m.keySet()) {
    if(m.get(str).equals("23")) {
        keys.add(str);
    }
}
于 2013-01-09T17:34:55.277 に答える