[解決済み] Rustでスライスを配列として取得するには?
2023-04-02 12:19:27
質問
サイズ不明の配列があり、その配列のスライスを取得して静的サイズの配列に変換したいのですが、どうすればよいでしょうか。
fn pop(barry: &[u8]) -> [u8; 3] {
barry[0..3] // expected array `[u8; 3]`, found slice `[u8]`
}
どうすればいいのでしょうか?
どのように解決するのですか?
これを簡単に行うには
TryInto
trait (Rust 1.34 で安定化しました) を使えば簡単にできます。
use std::convert::TryInto;
fn pop(barry: &[u8]) -> [u8; 3] {
barry.try_into().expect("slice with incorrect length")
}
しかし、さらに良いことに、要素をクローン/コピーする必要がないのです! それは実際に
&[u8; 3]
から
&[u8]
:
fn pop(barry: &[u8]) -> &[u8; 3] {
barry.try_into().expect("slice with incorrect length")
}
他の回答にもあるように、おそらくは
barry
の長さが3でない場合にパニックを起こすのではなく、このエラーを優雅に処理したいのでしょう。
これは関連するtraitのこれらのインプラントのおかげで動作します。
TryFrom
(Rust 1.47 以前では、これらは長さ 32 までの配列に対してのみ存在していました)。
impl<'_, T, const N: usize> TryFrom<&'_ [T]> for [T; N]
where
T: Copy,
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]
関連
-
[解決済み] Angular 2のTypeScriptで配列にフィルタをかけるには?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] 配列の最初の要素を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】アセンブリ言語での配列のバブルソート
-
[解決済み] MIPSで宣言された配列からの印刷
-
[解決済み] Scala:Arrayに要素を追加する最良の方法は何ですか?
-
[解決済み] int (*p)[10]=s と int (*o)[5]=&s の違いは何ですか?
-
[解決済み] MASMアセンブリの配列 (非常に混乱している初級者)
-
[解決済み] 最大和サブアレイのブルートフォースはなぜO(n^2)なのか?
-
[解決済み] 関数の引数として、文字列(&String)、Vec(&Vec)、ボックス(&Box)への参照を受け取ることは、なぜ推奨されないのですか?
-
[解決済み] Angular 2とTypeScriptで2つのオブジェクト配列をマージする?
-
[解決済み] 1次元数配列のクラスタリング
-
[解決済み] Google スプレッドシートで範囲を結合する方法