2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コレクションの理解

Posted at

はじめに

elixirのコレクションを理解する

解説

コレクションとは

ITの分野では、複数の要素を格納できる複合的なデータ構造をこのように呼ぶことが多い。

リスト

リストは値の単純なコレクションで、複数の型を含むことができます。また、一意ではない値を含むことができます:

list = [3.14, "test", :pie]

> [3.14, "test", :pie]

タプル

タプルはリストに似ていますが、各要素はメモリ上に隣接して格納されます。 このため、タプルの長さを得るのは高速ですが、修正を行うのは高コストとなります。というのも、新しいタプルは全ての要素がメモリにコピーされるからです。タプルは波括弧を用いて定義されます:

tuple = {3.14, "test", :pie}

> {3.14, "test", :pie}

キーワードリスト

キーワードリストとマップはElixirの連想コレクションです。Elixirでは、キーワードリストは最初の要素がアトムのタプルからなる特別なリストで、リストと同様の性能になります:

sample_list = [test: hoge]

sample_list[:test]

key_list = [pie: 3.14, all: 42]

> [pie: 3.14, all: 42]

# another version

key_list_another = [{:pie, 3.14}, {:all, 42}]

> [pie: 3.14, all: 42]

別の書き方もできるが出力させると上記の書き方になるためあまり有用性はなさそう。
けど一応覚えておかないとコードを読むときに不便しそうではある。

マップ

Elixirではマップは”花形の”キーバリューストアです。 キーワードリストとは違ってどんな型のキーも使え、順序付けされません。 マップは %{} 構文で定義することができます:

map = %{:name => "hoge", "12" => :id}

> %{:name => "hoge", "12" => :id}

ちなみに

pythonやJavaだとこういう書き方でリストを表現する
紛らわしいのでelixirを書いているときは気を付けて下さい

python

python_list = ["test", "hoge", "hey"]
python_list[0]
> "test"

Java

int[] result = new int[3];
result[0] = 1
result[1] = 2
result[2] = 3

result[1]

> 2

おわりに

なまじ色々なコードを触った経験があると基礎的な内容が疎かになったり年月とともに記憶が混濁してしまうのかもしれません。
今回知識を整理してキチンと理解に落とし込めるように記事に書き起こしました。

参考サイト

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?