如何使用单次检查匹配元组向量及其内容?
How do I match a vector of tuples and its content using a single check?
我想使用单个检查来匹配元组向量及其内容。如果元组中的值等于 some_value
(usize
),那么我会做一些事情,对于其他情况,我会做一些其他事情。
我按照基本逻辑是这样处理的:
if myvector.is_empty() {
// do action 1
} else if myvector.last().unwrap().0 == some_value {
// do action 2
} else {
// do action 1
}
这符合我的要求,但我觉得还有一种更惯用的方法。
我一直在尝试 match
:
match myvector.last() {
Some(t) => match t.0 == some_value {
true => unimplemented!("do action 2"),
false => unimplemented!("do action 1"),
},
None => unimplemented!("do action 1"),
}
这也有效,但我正在尝试找出一种更好的语法来只覆盖一个案例 (action1
)。
我使用了以下方法:
match myvector.last() {
Some(t) if t.0 == some_value => unimplemented!("do action2"),
_ => unimplemented!("do action1"),
}
我会做:
if let Some(_) = my_vector.last().filter(|(n, _)| n == some_value) {
// do action 2
} else {
// do action 1
}
可以使用slice pattern提取最后一个元素,直接在模式中解构元组:
fn test_last(v: &[(u32, u32)], testval: u32) -> u32 {
match v {
[.., (val, _)] if *val == testval => {
// action 2
}
_ => {
// action 1
}
}
}
我想使用单个检查来匹配元组向量及其内容。如果元组中的值等于 some_value
(usize
),那么我会做一些事情,对于其他情况,我会做一些其他事情。
我按照基本逻辑是这样处理的:
if myvector.is_empty() {
// do action 1
} else if myvector.last().unwrap().0 == some_value {
// do action 2
} else {
// do action 1
}
这符合我的要求,但我觉得还有一种更惯用的方法。
我一直在尝试 match
:
match myvector.last() {
Some(t) => match t.0 == some_value {
true => unimplemented!("do action 2"),
false => unimplemented!("do action 1"),
},
None => unimplemented!("do action 1"),
}
这也有效,但我正在尝试找出一种更好的语法来只覆盖一个案例 (action1
)。
我使用了以下方法:
match myvector.last() {
Some(t) if t.0 == some_value => unimplemented!("do action2"),
_ => unimplemented!("do action1"),
}
我会做:
if let Some(_) = my_vector.last().filter(|(n, _)| n == some_value) {
// do action 2
} else {
// do action 1
}
可以使用slice pattern提取最后一个元素,直接在模式中解构元组:
fn test_last(v: &[(u32, u32)], testval: u32) -> u32 {
match v {
[.., (val, _)] if *val == testval => {
// action 2
}
_ => {
// action 1
}
}
}