gpt4 book ai didi

loops - 展开向量中的(开始,结束)对

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

我有一个来自的(开始,结束)对的Vec<(usize, usize)> find_iter() ,我需要将其扩展为Vec<usize>。通过扩展,我的意思是[(0, 3), (10, 13)]应该扩展为[0, 1, 2, 10, 11, 12]。因此,介于两者之间的每个数字都应在Vec中,从start(包括)开始,到end(不包括)。我有工作代码,但我想知道是否有更优雅的方法。
这是一个最小的示例:

use regex::Regex;

fn get_substring_indexes(string: &str, substring: &str) -> Vec<usize> {
let mut indexes = Vec::new();
for mat in Regex::new(substring).unwrap().find_iter(string) {
indexes.extend(mat.range());
}
indexes
}

fn main() {
println!("{:?}", get_substring_indexes("git add . git", "git"));
}

最佳答案

Range 实现 Iterator ,因此您可以将它们用作迭代器。如果您想合并和展平多个迭代器,则可以使用 flatten 或本例中的 flat_map 。这是您的代码的更新示例:

playground link

use regex::Regex;

fn get_substring_indexes(string: &str, substring: &str) -> Vec<usize> {
Regex::new(substring)
.unwrap()
.find_iter(string)
.flat_map(|mat| mat.range())
.collect()
}

fn main() {
println!("{:?}", get_substring_indexes("git add . git", "git"));
}

关于loops - 展开向量中的(开始,结束)对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61613388/

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