У меня есть вектор строк.Я хочу получить два подмножества из этого вектора: строки с "zzz"
и строки с "bye"
.
Тип каждого подмножества Vec< && String>
.Который является вектором ссылок на ссылку на оригинальную строку.Как я могу получить только Vec<& String>
?
Код, над которым я сейчас работаю:
use std::string::String;
use std::vec::Vec;
fn main() {
let a1 = String::from("hi");
let a2 = String::from("bye");
let a3 = String::from("zzz");
let v_before: Vec<&String> = vec![&a1, &a2, &a3];
// ref_a is a copy of v_before[0]
let ref_zzz_a: &String = v_before[2];
let ref_zzz_b: &String = v_before[2];
println!("before: {:?}", v_before);
// QUESTION: why can not this also be Vec<& String> ?
// v_zzz is just like making vec![ref_zzz_a, ref_zzz_b]
let v_zzz: Vec<&&String> = v_before
.iter()
.filter(|&&element| element.contains("zzz"))
.collect();
let v_bye: Vec<&&String> = v_before
.iter()
.filter(|&&element| element.contains("bye"))
.collect();
let hand_made: Vec<&String> = vec![ref_zzz_a, ref_zzz_b];
println!("v_zzz: {:?}", v_zzz);
println!("v_bye: {:?}", v_bye);
println!("hand_made: {:?}", hand_made);
}
( Детская площадка )
Один из способов был быиспользовать vector.into_iter()...
, но тогда я не смог бы запустить второй фильтр.
Кроме того, может быть, именно такова ржавчина?Из-за автоматического разыменования может мне просто наплевать, что это Vec<&& String>
?Не приведет ли это к проблемам позже?