arrays - Rust中的意外行为 “for in n..m”

标签 arrays for-loop rust

我面临着意外的行为。我试图通过调试自己弄清楚,但这没有帮助。
P.S.对不起,如果问题会变得愚蠢。
src/main.rs

use test_crate::radix_tree_1::Node;

fn main() {
    let mut node = Node {
        label: String::from("test.com"),
        nodes: Vec::new(),
    };
    node.insert(String::from("test.com/company"));
    println!("{:?}",node);
}
src/radix_tree_1.rs
#[derive(Debug)]
pub struct Node {
    pub label: String,
    pub nodes: Vec<Node>,
}

//current node:
//let mut node = Node {
//    label: "test.com",
//    nodes: Vec::new(),
//};
impl Node {
    pub fn insert(&mut self, s: String) {
        //inserting test.com/comapany
        let parts: Vec<String> = s.split("/").map(|x| String::from(x)).collect();
        //parts [test.com,company]
        let parts_len = parts.len();
        //parts_len 2
        let mut reached: String = String::new();
        //reached ""
        let prefixs: Vec<String> = self.label.split("/").map(|x| String::from(x)).collect();
        //prefixs [test.com] from self.label = test.com
        let prefixs_len = prefixs.len();
        //prefixs_len = 1
        println!("{:?}, {:?}, {}",parts, prefixs, parts_len);
        for index in 0..parts_len-1 {
        // for index 0,1
            println!("index {}", index);
            if index >= prefixs_len {
            // if 0 >= 1
                println!("i>=prefixs.len");
                self.nodes.push(Node {
                    label: parts[index..].iter()
                        .map(|s| {
                            String::from(s)
                        }).collect(),
                    nodes: Vec::new(),
                })
            } else {
            // else
                if parts[index] == prefixs[index] {
                //if test.com == test.com
                    reached.push_str(prefixs[index].as_str());
                    // reached = test.com
                    println!("{}",reached);
                } else {
                    println!("parts[index] != prefixs[index]");
                }
            }
        }
    }
}
我与println垃圾邮件!并在代码中注释以进行调试,为了您更好地理解,我不会将其删除。
此conole输出:
["test.com", "company"], ["test.com"], 2
index 0
test.com
Node { label: "test.com", nodes: [] }
期望:达到指数--- 1
现实:“仅”适用于索引--- 0
问题出在哪里?

最佳答案

范围..已经是排他性的(不包括最终值),无需在其顶部减去1。

关于arrays - Rust中的意外行为 “for in n..m”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65991766/

相关文章:

c - c中多维数组的函数传递

java - 如何从 java 中的 try-catch block 返回数组?

c - 如何在 C 中的嵌套 for 循环构造中处理 printf?

c++ - 错误 C2143 : syntax error : missing ',' before ':'

c - 使用最少的数组查找数组组合以覆盖所有元素

java - StringTokenizer.countTokens() 在 for 循环条件中返回错误值

rust - 如何匹配 Rust 中的 &'static str

unicode - 如何迭代 Rust 中的 Unicode 字素簇?

rust - 具有阴影和 String -> &str 转换的 'let' 范围

java - 停止随机化在 Java 中两次选择数组中的相同字符串