簡體   English   中英

如何從 rust 中的無符號 integer 數組中刪除值

[英]How to delete values from an unsigned integer array in rust

我正在嘗試編寫一個 function 從無符號整數數組中刪除所有出現的 1,2 和 3。 我使用了 retain 方法,但我得到的錯誤是:

rustc -o main main.rs
error[E0599]: no method named `retain` found for array `[u32; 7]` in the current scope
 --> main.rs:3:5
  |
3 | arr.retain(|&x| x != 1 || x != 2 || x != 3);
  |     ^^^^^^ method not found in `[u32; 7]`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0599`.
compiler exit status 1

這是我到目前為止所擁有的:

fn remover(arr:[u32;7]){

arr.retain(|&x| x != 1 || x != 2 || x != 3);
println!("{:?}",arr);

}

fn main() {
    let v = [1,2,3,4,5,6,7];
    remover(v);
    
}

為什么我不能使用retain方法? 還有什么我可以使用的嗎?

數組具有固定大小( [u32; 7]將始終有 7 個元素),因此從中刪除元素是沒有意義的。

如果你想要一個動態大小的序列,你應該使用Vec ,它確實有一個retain方法

或者,如果您實際上不需要更新源,則可以保留一個數組並使用Iterator::filter

Arrays 在 Rust 中是靜態大小的,它的大小是類型的一部分。 [u32; 7] [u32; 7]將數組定義為恰好包含 7 個u32值。

如果您想要動態數量的值,則需要使用Vec<u32> ,即將v聲明為vec,[1,2,3,4,5,6,7]並讓您的remover()取取而代之的Vec<u32>

另一種解決方案是,您可以繼續過濾到數組的一部分。 通過這樣做,您不會重復數據,避免創建新向量。

fn main()
{
    let v = [1,2,3,4,5,6,7];
    let v_filtered = &v
        .iter()
        .filter(|&&x| x != 1 && x != 2 && x != 3)
        .inspect(|&&x| println!("retained {}", x))
        .collect::<Vec<_>>();

    dbg!(v);
    dbg!(v_filtered);
}

注意,我改變了過濾器的謂詞。 這里是我的游樂場

您可以刪除發布版本的調試信息和迭代檢查值。

暫無
暫無

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

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