繁体   English   中英

如何概括传递给具有不同类型键的函数的 HashMap?

[英]How to generalize a HashMap passed to a function with different types of keys?

我有一个hm1: HashMap<K, V> ,其中K是一个元组(k1, 2, k3)V是一个包含 10 个元素的元组,例如(v1, v2, v3, /* ... */ v10)

我有一个作用于该HashMap的函数,所以我将它作为参数传递:

fn do_something(hm1: HashMap<(&i64, &i64, &Option<i64>), (&i64, &i64, /* ... */ &i64)>) -> () {
    //Access k1, k2, k3 and v1 .. v10 and do something with it
}

我有第二个HashMap hm2 ,其中唯一的区别是一个额外的关键元素。 hm2: HashMap<K, V>其中K是一个元组(k1, k2, k3, k4)V又是一个包含 10 个元素的元组(v1, v2, v3, /* ... */ v10)

我想避免将相同的do_something()函数复制粘贴到经过修改的签名中,因为内部的逻辑几乎相同。 不同之处只是我在元组中有一个额外的k4元素,如果我有hm2 ,我也可以访问它。

有没有办法概括HashMap<K, V>参数,以便我可以传递两个HashMap并对其进行操作而无需复制我的函数?

我想避免将相同的do_something()函数复制粘贴到经过修改的签名中,因为内部的逻辑几乎相同。

为不同类型复制几乎相同的代码是 Rust 泛型的设计目标! 如果两种情况下值的类型相同,并且只有键不同,则可以对键进行抽象:

type Value<'a> = (&'a i64, &'a i64, /* ... */ &'a i64);

fn do_something<K>(hash_map: HashMap<K, Value<'_>>) {
    for value in hash_map.values() {
        // do something with the value
    }
}

鉴于您对函数内部的键一无所知,因此您无法对它们做太多事情。 特别是,您不能解构它们以访问关键元组的各个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM