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 相关联的脚本数量

正如我们在上面看到的,患者 ID 23 共有 5 个不同的脚本,所以我需要计算总的不同脚本和脚本编号也与患者 ID 23 相关联,即 123,323,153,623,125

我已将值显示为示例,但在我的情况下,动态值将填充在地图中,因此请告知。

4

5 回答 5

2

听起来您需要另一个方向的地图,将患者 ID 映射到计数。每次插入新记录时,get该患者的条目并增加它。

于 2013-01-09T17:30:33.667 回答
1

IfLinkedHashMap是您拥有的唯一数据结构,唯一的方法是对其进行迭代,并将每个患者 id 与23.

如果由于某种原因这不令人满意,您可以构建一个辅助数据结构。但是,如果不了解您的问题,很难在这个方向上提出具体的建议。

于 2013-01-09T17:30:33.113 回答
1

遍历您的Map或创建一个Map“Patient Id”是键,值是“脚本编号”的列表。

    //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 回答