functional programming - ¿Cómo analizo una cadena en una lista de flotantes usando un estilo funcional?
functional-programming rust (1)
Estoy tratando de analizar una cadena en una lista de valores de coma flotante en Rust. Asumiría que hay una forma inteligente de hacerlo utilizando iteradores y Option
; sin embargo, no puedo hacer que ignore los valores de Err
que resultan de llamadas fallidas de análisis (). El tutorial de Rust no parece cubrir ningún ejemplo como este, y la documentación es confusa en el mejor de los casos.
¿Cómo podría implementar esto usando las operaciones de vector / lista de estilo funcional? También se agradecerían los consejos sobre el mejor estilo de Rust para mi implementación iterativa.
Estilo "funcional"
Pánico cuando se encuentra con un Err
input.split(" ").map(|s| s.parse::<f32>().unwrap()).collect::<Vec<_>>()
Estilo iterativo
Ignora los valores no flotantes según lo previsto
fn parse_string(input: &str) -> Vec<f32> {
let mut vals = Vec::new();
for val in input.split_whitespace() {
match val.parse() {
Ok(v) => vals.push(v),
Err(_) => (),
}
}
vals
}
fn main() {
let params = parse_string("1 -5.2 3.8 abc");
for ¶m in params.iter() {
println!("{:.2}", param);
}
}
filter_map
hace lo que quiere, transformando los valores y filtrando None
:
input.split(" ").filter_map(|s| s.parse::<f32>().ok()).collect::<Vec<_>>();
Tenga en cuenta el método ok
para convertir el Result
en una Option
.