Part13:MapとSet

海未「それではデータ構造の最後として、MapとSetを見てみましょう。これらはECMAScript6で標準化されたものですから、環境によっては利用できない場合があります」


Map

海未「Mapはオブジェクトと似ています。オブジェクトではプロパティ名をキーとして値を関連づけていましたが、Mapは任意のキーに任意の値を関連づけられるデータ構造です」

海未「オブジェクトと似たようなことができるのが分かると思います」
ことり「Mapの動きはわかるんだけど、オブジェクトとは何が違うのかな?」
海未「主な違いはMapは要素の数と順番が管理されているという点です」

25
honoka
Array [ “honoka”, “kosaka” ]
Array [ 25, “にこにー” ]

ことり「sizeっていうのがあるんだ」
海未「はい。それを使って要素数を得ることができます。オブジェクトでは自力で数えないといけませんでした」
穂乃果「順番っていうのは、コンソールに出力された結果の順番が違うっていうこと?」
海未「forを使った反復で返ってくる順序が、オブジェクトでは保証されていませんがMapでは挿入順が保証されているのです。これが大きな違いですね」
ことり「値を入れておく用途だと、Mapの方が便利そうだね」
海未「実は、Mapで順序が保証されるというのは他の言語と比べても珍しいのです。ElixirやPythonのマップや辞書は、順序が保証されませんから」


Set

海未「Setは配列とよく似たデータ構造です」

海未「この通り、よく似ていますね」
ことり「deleteって、もしかしてインデックスじゃなくて値を指定して削除できるの?」
海未「ことりは話が早くて助かります。配列ではインデックスを特定してから削除しないといけなかったですが、Setは値を指定して削除できるので、状況によりますが便利です」
穂乃果「それ以外の見分けがつかないんだけど・・・」
海未「Setの最大の特徴は、値の重複を許さないということです。つまり」

海未「同じ値を複数回追加しても、自動的に1つにまとめられます」
ことり「配列とはそれで使い分ければいいんだね」
海未「重複が必要なら配列ですし、重複しないのであればSetの方が要素の探索速度などで利点がありますね」
ことり「前回やった配列操作もあるから、込み入ったことをするときは配列の方がいいのかもね」
穂乃果「これは、順序は?」
海未「配列同様、保持されます。これも他の言語ではあまり見ない特徴ですね」

honoka
25


海未「これで、基本文法と各データ構造について一通り見終わりました。次回からは、JavaScriptにおけるオブジェクト指向プログラミングについて勉強しましょう」
ことり「難しいって、聞いたことあるよ・・・」
穂乃果「ことりちゃんに難しいなら穂乃果には無理だよ~」
海未「最初から諦めてどうするのですか!・・・いえ、実際難しいのですけども」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です