Help us understand the problem. What is going on with this article?

Rustにおける連想配列リテラル・ハッシュリテラル相当

いろいろな言語の連想配列系リテラル記法を比較してみた | 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);

Rustでこのように指定した値の入ったハッシュを作る場合、以下のように書くほうが好まれるかと思います。

use std::collections::HashMap;

let hash = vec![
    ("apple".to_owned(), 1),
    ("orange".to_owned(), 2),
    ("coffee".to_owned(), 42),
]
.into_iter()
.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,
];
qnighy
wantedly
「シゴトでココロオドル」ためのビジネスSNS「Wantedly」の開発・運営をしています。
https://wantedlyinc.com/ja/presentations
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした