我有一个String
,我想创建一个新的String
字符,第一个字符中的每个字符都加倍。如此"abc"
会变得"aabbcc"
如此等等。
我想出的最好的是:
let mut result = String::new();
for c in original_string.chars() {
result.push(c);
result.push(c);
}
result
Run Code Online (Sandbox Code Playgroud)
这很好。但是有没有更简洁(或更惯用)的方式来做到这一点?
在JavaScript中,我可能会写类似:
original.split('').map(c => c+c).join('')
Run Code Online (Sandbox Code Playgroud)
或在Ruby中:
original.split('').map(c => c+c).join('')
Run Code Online (Sandbox Code Playgroud)
由于Rust也具有功能元素,所以我想知道是否存在类似的简洁解决方案。
我会用std::iter::repeat
重复char
输入中的每个值。这将创建一个无限迭代器,但是对于您的情况,我们只需要迭代2次,因此我们可以take
用来限制我们的迭代器,然后展平所有包含doubled char
的迭代器。
use std::iter;
fn main() {
let input = "abc"; //"abc".to_string();
let output = input
.chars()
.flat_map(|c| iter::repeat(c).take(2))
.collect::<String>();
println!("{:?}", output);
}
Run Code Online (Sandbox Code Playgroud)
注意:要加倍使用take(2)
,我们可以使用任何一个usize
来增加重复次数。
归档时间: |
|
查看次数: |
141 次 |
最近记录: |