コロンで区切られた値を持つString
があります。各サブストリングはマップ内のキーでなければなりません。 String
をマップ値のVec
に変換する関数を記述したいと思います。キーがない場合は失敗します。ハッシュマップルックアップを使用したイテレータマップ。いずれのキーでも失敗する
これまでのところ、私の試みは不完全ですが、私はそれを少しずつ取り上げています。最初のステップは、文字列をオプションのu32
のベクトルに変換することです。 (これが最善の方法ではない場合があります):これは
error: the trait bound `std::vec::Vec<std::option::Option<u32>>: std::iter::FromIterator<std::option::Option<&u32>>` is not satisfied [--explain E0277]
--> <anon>:8:52
|>
8 |> string.split(":").map(|s: &str| lookup.get(s)).collect()
|> ^^^^^^^
note: a collection of type `std::vec::Vec<std::option::Option<u32>>` cannot be built from an iterator over elements of type `std::option::Option<&u32>`
になり
fn parse(string: &String, lookup: HashMap<String, u32, FastHasher>) -> Vec<Option<u32>> {
string.split(":").map(|s: &str| lookup.get(s)).collect()
}
私は、これは私が右、Option<&u32>
のための私自身から、イテレータ行動をインポートまたは書き込みする必要があることを意味信じますか?
これを実行した後、None
の存在に応じて、Ok
またはErr
をどのようにラップできますか?この問題を回避するためには
返品の種類を忘れましたか? – starblue
私はそれがそのままの文章でどのような問題があるのか見逃しました。私はこのコードのいくつかの長い遠隔反復で戻り値の型を持っていました。更新しました。 – Synesso