私は錆を学びようとしています。そして、私が遭遇した最近の問題は次のとおりです。String
、つまりnの倍数は、文字列をサイズNのチャンクに分割し、これらのチャンクの間にスペースを挿入してから、単一の文字列.
IUS INSION IUS IUSTでは、chars()
メソッドがChars
structを返します。これは何らかの理由でSliceConcatExt
形式を実装していないため、chunks()
を呼び出すことはできません。
さらに、(代わりに.bytes()
を呼び出すことによって)チャンク構造体を正常に作成したら、要素がバイトスライスのChunks
の場合、.join(' ')
を呼び出す方法はわかりません...
これを行うためのエレガントな方法がある必要があります。
たとえば、ここでは状況を示す入力/出力です。
_given: whatupmyname, 4
output: what upmy name
_
これは私の不十分な試みです。
_let n = 4;
let text = "whatupmyname".into_string();
text.chars()
// compiler error on chunks() call
.chunks(n)
.collect::<Vec<String>>()
.join(' ')
_
ご協力ありがとうございました!
そのため、文字列を作成するために文字のリストから作業したい場合は、それに対して 折りたたみ を使用できます。
このようなもの :
text.chars
.enumerate()
.fold(String::new(), |acc, (i, c)| {
if i != 0 && i == n {
format!("{} {}", acc, c)
} else {
format!("{}{}", acc, c)
}
})
_
分割したいデータのサイズが修正された場合
use std::str;
fn main() {
let subs = "‌​‌​‌​​‌​‌".as_bytes()
.chunks(7)
.map(str::from_utf8)
.collect::<Result<Vec<&str>, _>>()
.unwrap();
println!("{:?}", subs);
}
// >> ["‌", "​", "‌", "​", "‌", "​", "​", "‌", "​", "‌"]
_