如何将类型显式分配给在“匹配”中使用的“Option<usize>”?
How to I explicitly assign a type to an `Option<usize>` that is used in a `match`?
我正在做一个(可能不好的)排序算法作为练习实验。
我正在尝试获取一个未排序的 i32
列表,其中包含重复项,将其分解为一个已排序数组(各种大小)的数组,然后我可以有效地将其重新组合成一个完全排序的数组。重组尚未实施
mod sort {
use std::collections::VecDeque;
pub fn sort_i32(unsorted_list: &Vec<i32>) { // -> Vec<i32> {
let mut sorting = Vec::with_capacity(unsorted_list.len());
let mut sorting_index = None;
// let mut index: usize = 0;
for number in unsorted_list {
match sorting_index { // sorting_index: Option<usize>
Some(index) => { // index: usize // index<usize>
// let index: usize = index as usize;
if number >= sorting[index].front() {
sorting[index].push_front(number);
} else if number <= sorting[index].back() {
sorting[index].push_back(number);
} else {
let index = index + 1; //index: usize
sorting_index = Some(index);
sorting[index] = VecDeque::with_capacity(unsorted_list.len());
sorting[index].push_front(number);
}
}
None => {
// have to initialize here because we need the first `number` to do so
let index = 0; //index: usize
sorting_index = Some(index);
sorting[index] = VecDeque::with_capacity(unsorted_list.len());
sorting[index].push_front(number);
}
}
}
}
}
我想我需要明确地告诉编译器 index
将是 usize
因为它将成为向量的索引:
error[E0282]: type annotations needed
--> src/main.rs:12:34
|
12 | if number >= sorting[index].front() {
| ^^^^^^^^^^^^^^ cannot infer type for `_`
正常的输入语法似乎不起作用;正如您从评论中看到的那样,我已经尝试了一些方法。
首先要做的是输入 sorting
和 sorting_index
:
let mut sorting: Vec<VecDeque<i32>> = Vec::with_capacity(unsorted_list.len());
let mut sorting_index: Option<usize> = None;
这将导致在访问 sorting[index]
的代码中的各个站点进行大量调整和决策。我可以添加更多,但在那之后主要是解决编译器错误并决定如何在算法中处理这些情况。
我正在做一个(可能不好的)排序算法作为练习实验。
我正在尝试获取一个未排序的 i32
列表,其中包含重复项,将其分解为一个已排序数组(各种大小)的数组,然后我可以有效地将其重新组合成一个完全排序的数组。重组尚未实施
mod sort {
use std::collections::VecDeque;
pub fn sort_i32(unsorted_list: &Vec<i32>) { // -> Vec<i32> {
let mut sorting = Vec::with_capacity(unsorted_list.len());
let mut sorting_index = None;
// let mut index: usize = 0;
for number in unsorted_list {
match sorting_index { // sorting_index: Option<usize>
Some(index) => { // index: usize // index<usize>
// let index: usize = index as usize;
if number >= sorting[index].front() {
sorting[index].push_front(number);
} else if number <= sorting[index].back() {
sorting[index].push_back(number);
} else {
let index = index + 1; //index: usize
sorting_index = Some(index);
sorting[index] = VecDeque::with_capacity(unsorted_list.len());
sorting[index].push_front(number);
}
}
None => {
// have to initialize here because we need the first `number` to do so
let index = 0; //index: usize
sorting_index = Some(index);
sorting[index] = VecDeque::with_capacity(unsorted_list.len());
sorting[index].push_front(number);
}
}
}
}
}
我想我需要明确地告诉编译器 index
将是 usize
因为它将成为向量的索引:
error[E0282]: type annotations needed
--> src/main.rs:12:34
|
12 | if number >= sorting[index].front() {
| ^^^^^^^^^^^^^^ cannot infer type for `_`
正常的输入语法似乎不起作用;正如您从评论中看到的那样,我已经尝试了一些方法。
首先要做的是输入 sorting
和 sorting_index
:
let mut sorting: Vec<VecDeque<i32>> = Vec::with_capacity(unsorted_list.len());
let mut sorting_index: Option<usize> = None;
这将导致在访问 sorting[index]
的代码中的各个站点进行大量调整和决策。我可以添加更多,但在那之后主要是解决编译器错误并决定如何在算法中处理这些情况。