De la documentación , no está claro. En Java podría usar el split
método de esta manera:
"some string 123 ffd".split("123");
De la documentación , no está claro. En Java podría usar el split
método de esta manera:
"some string 123 ffd".split("123");
Split
y configurarlo en la matriz. Por supuesto, esto significa que el número de elementos en cada división debe ser el mismo, ya que las matrices tienen un tamaño fijo y debe tener la matriz definida anteriormente. Me imagino que esto puede ser más problemático que simplemente crear unVec
.Respuestas:
Utilizar
split()
Esto le da un iterador, que puede recorrer o
collect()
en un vector.fuente
.collect::<Vec<_>>()
.let split
?split.len()
no existe.count()
.len()
es solo para iteradores que conocen su tamaño exacto sin necesidad de ser consumidos,count()
consume el iterador.error: cannot borrow immutable local variable
split` as mutable`let mut split
, lo siento.Hay tres formas simples:
Por separador :
Por espacios en blanco :
Por nuevas líneas :
El resultado de cada tipo es un iterador:
fuente
Hay un método especial
split
para structString
:Dividido por char:
Dividir por cadena:
Dividir por cierre:
fuente
split
devuelve unaIterator
, que se puede convertir en unVec
usandocollect
:split_line.collect::<Vec<_>>()
. Pasar por un iterador en lugar de devolver unVec
directamente tiene varias ventajas:split
es perezoso. Esto significa que realmente no dividirá la línea hasta que la necesite. De esa manera no va a perder el tiempo de la división toda la cadena si sólo necesita los primeros valores:split_line.take(2).collect::<Vec<_>>()
, o incluso si sólo necesita el primer valor que se puede convertir en un entero:split_line.filter_map(|x| x.parse::<i32>().ok()).next()
. Este último ejemplo no perderá tiempo intentando procesar el "23.0" pero detendrá el procesamiento inmediatamente una vez que encuentre el "1".split
no asume la forma en que desea almacenar el resultado. Puede usar aVec
, pero también puede usar cualquier cosa que implementeFromIterator<&str>
, por ejemplo aLinkedList
o aVecDeque
, o cualquier tipo personalizado que implementeFromIterator<&str>
.fuente
let x = line.unwrap().split(",").collect::<Vec<_>>();
no funciona a menos que esté separada en dos líneas separadas:let x = line.unwrap();
ylet x = x.split(",").collect::<Vec<_>>();
? El mensaje de error dice:temporary value created here ^ temporary value dropped here while still borrowed
let x = line.as_ref().unwrap().split(",").collect::<Vec<_>>();
También hay
split_whitespace()
fuente