簡體   English   中英

如何檢查 Vec 中的值是否為無?

[英]How to check if a value in a Vec is None?

如果該索引處沒有任何內容但該索引仍然存在,我想使用Vec.last()返回None的事實。 問題是我找不到將結果與一段while內的任何內容或if進行比較的方法。 但是,如果我使用match ,我可以比較它,盡管這似乎比使用while循環效率低。 有沒有辦法在ifwhile循環中比較它?

這就是我想要做的,但是self.particles.last() == None是無效的,因為據我所知,除了None之外,您無法將事物與None進行比較。

while vec.last() == None {
    num += 1;
}

如果該索引處沒有任何內容但該索引仍然存在,我想使用Vec.last()返回None的事實。

您似乎對Vec::last的行為感到非常困惑。 如果“該索引仍然存在”(無論這意味着什么),它絕對不會返回None 如果 vec 為空,它將返回None ,僅此而已。

所以你的循環要么永遠不會執行,要么永遠循環。

這就是我想要做的,但是 self.particles.last() == None 是無效的,因為據我所知,除了 None 之外,您無法將事物與 None 進行比較。

 while vec.last() == None { num += 1; }

不? 問題可能是Option<T>PartialEq如果TPartialEqhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=00f4ea97a0fad1cd74ef3b6ac6b74dc8

#[derive(PartialEq, Eq)]
struct Equatable;
struct NonEquatable;
fn main() {
    // compiles fine
    println!("{}", None == Some(Equatable));
    // can't compile
    // println!("{}", None == Some(NonEquatable));
}

雖然這顯然不是正常的方法,但您通常會使用Option::is_none ,可能matches! 在極少數情況下(但對於沒有謂詞的枚舉來說更是如此)。

您可以使用模式匹配語法。 那是什么? 好吧,通常你會寫這樣的東西來循環,只要你得到Some值並同時將項目綁定到一個變量:

while let Some(elem) = vec.last() {
    ...
}

Some(elem)是一種模式。 事實證明,您可以將其替換為沒有變量的模式: None

while let None = vec.last() {
    ...
}

我承認let沒有變量看起來很奇怪,看起來左邊有None是向后的,但它有效。

(另外,我應該指出,如果您不修改vec ,這將是一個無限循環,是嗎?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM