pub fn label_hits(&mut self) { let mut current_label = 1; let ohits = self.hits.clone(); for i in 0..self.hits.len() { let hit = self.hits[i]; if hit.label == 0 { let subset: Vec<&Hit> = ohits .iter() .filter(|o| { ((hit.toa - o.toa).abs() < 1_000_000) // 1 us is really long for this. && (o.label == 0) && (hit.col as i16 - o.col as i16).abs() < 15 && (hit.row as i16 - o.row as i16).abs() < 15 }) .collect(); let mut active = vec![&hit]; let mut checked = vec![]; while !active.is_empty() { if let Some(check) = active.pop() { for prox in subset.iter().filter(|h| h.is_proximal(check)) { if !(checked.contains(prox) || active.contains(prox)) { active.push(prox); } } self.hits[check.index as usize].label = current_label; checked.push(check); } } current_label += 1; } } self.clusters = (current_label - 1) as usize; }
时间: 2024-02-10 19:27:39 浏览: 194
mut.rar_Windows编程_C++_
这段代码定义了一个名为 `label_hits` 的公共函数,用于给 `self` 中的 `hits` 进行标记。
在函数内部,首先初始化一个变量 `current_label`,表示当前的标签值,初始值为 1。
然后,通过 `self.hits.clone()` 创建了一个 `ohits` 变量,用于保存 `self.hits` 的克隆副本。
接下来,通过一个 `for` 循环遍历 `self.hits` 中的每个元素。在循环中,首先获取当前元素的引用 `hit`。
然后,判断 `hit.label` 是否为 0。如果是 0,则进入条件语句块进行一系列操作。
在条件语句块中,首先使用 `ohits.iter()` 创建一个迭代器,并使用 `filter()` 方法进行过滤操作。过滤操作的条件是:
- `(hit.toa - o.toa).abs() < 1_000_000`:判断 `hit.toa` 和 `o.toa` 之间的差值的绝对值是否小于 1,000,000(1微秒)。
- `o.label == 0`:判断 `o.label` 是否为 0。
- `(hit.col as i16 - o.col as i16).abs() < 15`:判断 `hit.col` 和 `o.col` 之间的差值的绝对值是否小于 15。
- `(hit.row as i16 - o.row as i16).abs() < 15`:判断 `hit.row` 和 `o.row` 之间的差值的绝对值是否小于 15。
过滤后的结果被收集到一个 `Vec<&Hit>` 中,并赋值给变量 `subset`。
接着,声明了两个空的可变向量 `active` 和 `checked`。
然后,进入一个 `while` 循环,循环条件是 `active` 不为空。在循环中,首先通过 `active.pop()` 获取 `active` 向量的最后一个元素,并将其赋值给 `check`。
接下来,通过迭代器 `subset.iter().filter(|h| h.is_proximal(check))` 进行过滤操作,过滤条件是 `h.is_proximal(check)` 返回 `true`。如果过滤结果中的元素不在 `checked` 和 `active` 中,则将其添加到 `active` 向量中。
然后,将 `self.hits[check.index as usize].label` 设置为 `current_label`,表示给当前元素打上标签。
最后,将 `check` 添加到 `checked` 向量中。
在循环结束后,将 `current_label - 1` 转换为 `usize` 类型,并赋值给 `self.clusters`,表示聚类的数量。
请注意,这段代码展示了部分内容,并可能依赖于其他未提供的代码。如果需要更详细的解释或有其他问题,请提供完整的代码或更多上下文信息。
阅读全文