我正在编写一个以通用方式实现前缀树的容器(键和值是通用参数).由于这个数据结构的性质,我需要密钥来拥有一个迭代器.
基本上根据这个问题,IntoIterator特征是造成这种可能性的原因,但并非所有结构都能实现它.例如&str,String不要实现它.
在这种情况下,如果IntoIterator标准类型没有实现,我该怎么办?
预期的API是
let mut t1 = Trie::new();
t1.insert(String::from("this"), 1);
let mut t2 = Trie::new();
t2.insert(vec![1, 2, 3], 1);
Run Code Online (Sandbox Code Playgroud)
这个问题String和str是他们有两种类型的迭代器- chars()-迭代器来UTF-8字符和bytes()-在字节迭代器.这就是为什么不可能IntoIterator为这些类型实现的原因.你必须创建两个包装器(或选择其中一个)
struct ByteString(String)
struct Utf8String(String)
Run Code Online (Sandbox Code Playgroud)
并IntoIterator为他们实施.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |