Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationEventAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.



いろいろな言語の連想配列系リテラル記法を比較してみた | TechRacho という記事でRustにも言及されていますが、そこでは以下のような手続き的な構成が紹介されています。

use std::collections::HashMap;

let mut hash = HashMap::new();
hash.insert("apple".to_owned(), 1);
hash.insert("orange".to_owned(), 2);
hash.insert("coffee".to_owned(), 42);


use std::collections::HashMap;

let hash = vec![
    ("apple".to_owned(), 1),
    ("orange".to_owned(), 2),
    ("coffee".to_owned(), 42),
.collect::<HashMap<_, _>>();

(Add IntoIterator impl for arrays by valueがマージされれば上記の vec![][] とすることができます)

また maplit クレート が以下のようなマクロを提供しています。

use maplit::hashmap;

let hash = hashmap!{
    "apple".to_owned() => 1,
    "orange".to_owned() => 2,
    "coffee".to_owned() => 42,

Rustのマクロは () [] {} のいずれでも呼び出せるので、 hashmap!()hashmap![] のように書いてもかまいません。 ({} だけ構文上の扱いが少しだけ異なりますが、このユースケースではほとんど問題にならないと思われます)

また本題とは逸れますが、上記のように String 型のリテラルが必要な場合は big_s クレート も便利です。

use big_s::S;
use maplit::hashmap;

let hash = hashmap![
    S("apple") => 1,
    S("orange") => 2,
    S("coffee") => 42,
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Help us understand the problem. What are the problem?