有条件地添加到HashMap的最佳方法是尽可能少的查找?

时间:2016-09-18 16:57:14

标签: optimization hashmap rust

使用哈希映射时,如果密钥尚未存在,则通常需要添加key:value对。

这读得不错,但并不是最佳。

if !map.contains(key) {
    let val = create_val();
    map.insert(key, val);
    some_creation_logic(val);
} else {
    let val = map[key];
    some_update_logic(val);
}

虽然这样可行但总是会进行2次查找。

我最接近的是使用Entry.or_insert(或or_insert_with),计算长度,以便可以采用else分支。

let map_len_prev = map.len();
let val = map.or_insert_with(key, create_val);
if map_len_prev != map.len() {
    some_creation_logic(val);
} else {
    some_update_logic(val);
}

是否有一种更清晰的方法可以在需要时插入一个值,同时保持一种运行两个逻辑分支的方式来处理已经/不存在的情况?

1 个答案:

答案 0 :(得分:11)

您可以匹配@Entity public class Book { public static final String TABLE = "books"; public static final String PAGE_COUNT = "page_count"; //everything else } @Service public class SomeService { public void someMethod() { String query = "SELECT * FROM " + Book.TABLE + " WHERE " + Book.PAGE_COUNT + " < 10"; } }

Entry