gpt4 book ai didi

rust - 如何将字符串拆分为每个字符的单元

转载 作者:行者123 更新时间:2023-11-29 08:10:49 26 4
gpt4 key购买 nike

我想取一个字符串,其中有可能重复的字符,并将字符串拆分为每个字符的单元。

比如

aaaabbbabbbaaaacccbbbbbbbbaaa

会变成

[ aaaa, bbb, a, bbb, aaaa, ccc, bbbbbbbb, aaa ]

最佳答案

一个简洁的方法是使用 Itertools::group_bychar 的迭代器上:

extern crate itertools;

use itertools::Itertools;

fn main() {
let input = "aaaabbbabbbaaaacccbbbbbbbbaaa";

let output: Vec<String> = input
.chars()
.group_by(|&x| x)
.into_iter()
.map(|(_, r)| r.collect())
.collect();

assert_eq!(
output,
["aaaa", "bbb", "a", "bbb", "aaaa", "ccc", "bbbbbbbb", "aaa"]
);
}

但是,这需要为每组字符创建新的 Strings。更有效的解决方案是将切片返回到原始字符串。

对先前解决方案的(hacky)修改产生这些:

let mut start = input;
let output: Vec<&str> = input
.chars()
.group_by(|&x| x)
.into_iter()
.map(|(_, r)| {
let len: usize = r.map(|c| c.len_utf8()).sum();
let (a, b) = start.split_at(len);
start = b;
a
})
.collect();

关于rust - 如何将字符串拆分为每个字符的单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49099560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com