gpt4 book ai didi

string - 将具有空元素的字符串向量转换为连接的字符串向量

转载 作者:行者123 更新时间:2023-12-03 11:33:43 26 4
gpt4 key购买 nike

我有一个Vec<&str>,其中包含空字符串。我想编写一个函数join_and_partition_on_empty,该函数返回一个Vec<&str>,其中所有非空字符串都以空格连接,然后删除空字符串,从而创建新的字符串开头。

// example test
assert_eq!(
join_and_partition_on_empty(vec!["a", "", "b", "c", "", "d", "e" ],
vec!["a", "b c", "d e" ]
)
我尝试使用迭代器和 fold,但是在尝试连接字符串时遇到所有权问题。

最佳答案

以下是否满足要求?

let input = vec!["a", "", "b", "c", "", "d", "e"];
let res = input
.split(|s| s.is_empty())
.filter(|s| !s.is_empty())
.map(|s| s.join(" "))
.collect::<Vec<_>>();
["a", "b c", "d e"]
如果需要,可以使用 filter() 删除由于连续的空字符串而导致的多余子片段。下面的输入将产生与上面列出的相同的输出:
let input = vec!["a", "", "", "", "", "b", "c", "", "d", "e"];
上面的效率可能不那么有效,因为 .split() 的文档提到为匹配谓词的每个元素(即空字符串)创建了子切片。
作为一种替代方法,这是一种命令式方法,由于忽略空字符串,它可能会更有效:
let input = vec!["a", "", "b", "c", "", "d", "e" ];

let mut res = vec![];
let mut group = vec![];

for s in input.iter() {
if !s.is_empty() {
group.push(&s[..]);
} else if !group.is_empty() {
res.push(group.join(" "));
group.clear();
}
}

// Push any remaining values
if !group.is_empty() {
res.push(group.join(" "));
}

关于string - 将具有空元素的字符串向量转换为连接的字符串向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65162728/

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