[Rust]HashMap(ハッシュマップ)をVec(ベクタ)に変換するには?

Rust

どうも、ちょげ(@chogetarou)です。

HashMap(ハッシュマップ)をVec(ベクタ)に変換する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

HashMap(ハッシュマップ)をVec(ベクタ)に変換する方法は、3つあります。

キー(key)を変換

ひとつめは、キー(key)を変換する方法です。

まず、HashMapからkeys()を呼び出します。

keys()からcloned()を呼び出します。

そして、cloned()からcollect()を呼び出します。

//map=対象のマップ, T=キーの型
let keys: Vec<T> = map.keys().cloned().collect::<Vec<T>>();

上記のcollect()は、HashMap(ハッシュマップ)のキー(key)をVec(ベクタ)として取得します。

使用例

use std::collections::HashMap;

fn main() {
    let mut numbers = HashMap::new();
    
    numbers.insert("one", 1);
    numbers.insert("two", 2);
    numbers.insert("three", 3);
    numbers.insert("four", 4);
    numbers.insert("five", 5);
    
    let keys: Vec<&str> = numbers.keys().cloned().collect::<Vec<&str>>();
    
    println!("{:?}", keys);
}
出力:
["one", "four", "three", "two", "five"]

値(value)を変換

ふたつめは、値(value)を変換する方法です。

まず、HashMapからvalues()を呼び出します。

values()からcloned()を呼び出します。

そして、cloned()からcollect()を呼び出します。

//map=対象のマップ, T=値の型
let values: Vec<T> = map.values().cloned().collect::<Vec<T>>();

上記のcollect()は、HashMap(ハッシュマップ)の値(value)をVec(ベクタ)として取得します。

使用例

use std::collections::HashMap;

fn main() {
    let mut numbers = HashMap::new();
    
    numbers.insert("one", 1);
    numbers.insert("two", 2);
    numbers.insert("three", 3);
    numbers.insert("four", 4);
    numbers.insert("five", 5);
    
    let values: Vec<i32> = numbers.values().cloned().collect::<Vec<i32>>();
    
    println!("{:?}", values);
}
出力:
[3, 2, 5, 1, 4]

キーと値のペア(key-value pair)を変換

みっつめは、キーと値のペア(key-value pair)を変換する方法です。

まず、iter()を呼び出します。

そして、iter()からcollect()を呼び出します。

//map=対象のマップ, T=値の型
let pair: Vec<_> = map.iter().collect::<Vec<_>>();

上記のcollect()は、HashMap(ハッシュマップ)のキーと値のペア(key-value pair)をVec(ベクタ)として取得します。

使用例

use std::collections::HashMap;

fn main() {
    let mut numbers = HashMap::new();
    
    numbers.insert("one", 1);
    numbers.insert("two", 2);
    numbers.insert("three", 3);
    numbers.insert("four", 4);
    numbers.insert("five", 5);
    
    let pair: Vec<_> = numbers.iter().collect::<Vec<_>>();
    
    println!("{:?}", pair);
}
出力:
[("four", 4), ("five", 5), ("one", 1), ("three", 3), ("two", 2)]

まとめ

HashMap(ハッシュマップ)をVec(ベクタ)に変換する方法は、次の3つです。

  • キーを変換する方法
    let keys: Vec<T> = map.keys().cloned().collect::<Vec<T>>();
  • 値を変換する方法
    let values: Vec<T> = map.values().cloned().collect::<Vec<T>>();
  • キーと値のペアを変換する方法
    let pair: Vec<_> = map.iter().collect::<Vec<_>>();

コメント

タイトルとURLをコピーしました