Tag:

如何有效地查找和插入HashMap?

我想要做以下事情: 查找某个关键的Vec ,并将其存储以备后用。 如果不存在,则为该键创build一个空的Vec ,但仍保留在该variables中。 如何有效地做到这一点? 当然,我认为我可以使用match ,但是当我尝试它,它给了我多个错误: use std::collections::HashMap; // This code doesn't compile. let mut map = HashMap::new(); let key = "foo"; let values: &Vec<isize> = match map.get(key) { Some(v) => v, None => { let default: Vec<isize> = Vec::new(); map.insert(key, default); &default } }; 我最终做了这样的事情,但我不喜欢它执行查找两次( map.contains_key和map.get )的事实: // This code does compile. […]

什么是正确的方式来返回一个迭代器(或任何其他性状)?

下面的Rust代码编译和运行没有任何问题。 fn main() { let text = "abc"; println!("{}", text.split(' ').take(2).count()); } 之后,我尝试了这样的东西….但它没有编译 fn main() { let text = "word1 word2 word3"; println!("{}", to_words(text).take(2).count()); } fn to_words(text: &str) -> &Iterator<Item = &str> { &(text.split(' ')) } 主要的问题是,我不确定什么返回types的函数to_words()应该有。 编译器说: error[E0599]: no method named `count` found for type `std::iter::Take<std::iter::Iterator<Item=&str>>` in the current scope –> src/main.rs:3:43 | 3 […]

我如何创build一个全局的,可变的单身人士?

在系统中只有一个实例创build和使用结构的最好方法是什么? 是的,这是必要的,这是OpenGL的子系统,并将其多个副本,并将其传递到任何地方会增加混淆,而不是缓解它。 单身人士需要尽可能高效。 在静态区域存储一个任意的对象似乎是不可能的,因为它包含一个具有析构函数的Vec 。 第二种select是在静态区域存储一个(不安全的)指针,指向一个堆分配的单例。 在保持语法简洁的同时,做到这一点最方便和最安全的方法是什么?

将本地string作为切片(&str)

有几个问题似乎是关于我有同样的问题。 例如看到这里和这里 。 基本上我试图在本地函数中build立一个String ,但是然后返回它作为&str 。 切片不工作,因为寿命太短。 我不能直接在函数中使用str ,因为我需要dynamic构build它。 但是,我也不想返回一个String因为这个对象的性质在构build之后是静态的。 有没有办法让我的蛋糕也吃了吗? 这是一个最小的非编译复制: fn return_str<'a>() -> &'a str { let mut string = "".to_string(); for i in 0..10 { string.push_str("ACTG"); } &string[..] }