Есть ли способ использовать HashMap и получить вектор значений в Rust? - PullRequest
4 голосов
/ 17 января 2020

У меня есть hashmap: HashMap<SomeKey, SomeValue>, и я хочу использовать hashmap и получить все его значения в виде вектора.

То, как я сейчас это делаю, это

let v: Vec<SomeValue> = hashmap.values().cloned().collect();

cloned копирует каждое значение, но эта конструкция не использует хэш-карту. Я в порядке с потреблением карты.

Есть ли способ получить значения, не копируя их?

1 Ответ

8 голосов
/ 17 января 2020

Преобразуйте все HashMap в итератор и отбросьте ключи:

use std::collections::HashMap;

fn only_values<K, V>(map: HashMap<K, V>) -> impl Iterator<Item = V> {
    map.into_iter().map(|(_k, v)| v)
}

Затем вы можете делать с итератором все, что захотите, в том числе собирать его в Vec<_>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...