[英]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.