学習Clojureパート3:データ構造


私たちのクロジュルの学習の旅の一部では、我々はデータ構造を越える.
箱の外では、クロジュールはほとんどの時代を必要とする多くの構造を持っています.それらはすべて不変です.つまり、代わりにそれらを変更することはできません.

データ型
Clojureは数値の大きなサポートをしています.それは、浮動小数点、整数などをサポートすることができます.
42
4.2
4/2
文字列はダブルクォートで表されます.そして、彼らだけによって.単一引用符は文字列と見なされません.
"Darth Vader"
"\"You shall not pass\""

マップ
マップはJavaのマップ、Pythonの辞書などに似ています.
空マップは次のように定義されます:
{}
値は以下のように定義されます:
{:title "Darth" :name "Vader"}
The :title and :name キーワードです.それらは主にマップのキーとして使用されます.しかし、値を検索する関数として使用できます.
(:title {:title "Darth" :name "Vader"})
;=> "Darth"
ここでデフォルト値を指定できます.
(:place {:title "Darth" :name "Vader"} "Death Star")
;=> "Death Star"
必要に応じて文字列をキーとして使用できます.
ここでは、プラス関数を使用して文字列キーを使用します.
{"key" +}
この値を得るにはget 関数.
(get {"a" 0 "b" 1} "a")
;=> 0
マップは入れ子にできます:
{:name {:first "Anakin" :last "Skywalker"}}
あなたが使うことができるそれらの値を得るためにget-in エクスプレッション.
(get-in {:name {:first "Anakin" :last "Skywalker"}} [:name :last])
;=> "Skywalker"
また、hash-map 関数はマップを作成します.
(hash-map :a 0 :b 1)
;=> {:b 1, :a 0}

ベクター
ベクトルは配列と似ています.それは0 -インデクサコレクションです.
ベクトルのリテラルは以下の通りです:
[42 43 44]
get関数を使用して値を取得できます:
(get [42 43 44] 0)
;=> 42

(get ["vector" "of" "strings"] 1)
;=> "of"
また、使用することができますvector 式をベクトルに入力します.
(vector 1 2 3 4 5)
使用conj ベクトルの末尾に要素を追加するには
(conj [1 2 3] 4)
;=> [1 2 3 4]

リスト
リストはベクトルと非常に似ています.リストから要素を取得できませんget でもnth (すべての要素を越えるように遅くなる)conj コレクションの先頭に追加します.
'(1 2 3 4)
;=> (1 2 3 4)

(nth '(1 2 3 4) 0)
;=> 1

(conj '(1 2 3 4) 5)
;=> (5 1 2 3 4)
それで、我々が何を使うべきですか?我々が見つけることができる最良のルールは、我々は簡単に最初にリストを使用する必要がありますを追加するときです.

集合
セットはユニークな値のコレクションです.我々は、リテラシーまたはhash-set 関数.
#{"Darth Vader" "Yoda" "Anakin Skywalker"}

(hash-set "Darth Vader" "Yoda" "Anakin Skywalker" "Yoda")
;=> #{"Anakin Skywalker" "Yoda" "Darth Vader"}
つの値の複数のインスタンスがあるとき、2番目のものが自動的に取り除かれます.
設定する値を追加できますconj , 重複した値が追加されると、それはありません.
(conj #{"a" "b"} "c")
;=> #{"a" "b" "c"}

(conj #{"a" "b" "c"} "c")
;=> #{"a" "b" "c"}
また、ベクトルやリストを設定するにはset 関数.
(set [1 1 2 2 3 3 4 4])
;=> #{1 4 3 2}
私たちはcontains? セットが値を持つたびにチェックする.
(contains? #{1 2} 1)
;=> true

(contains? #{1 2} 3)
;=> false
そして、我々はget 値を取得するには
(get #{1 2} 1)
;=> 1

(get #{1 2} 3)
;=> nil
あなたはこのようなコンテンツを得るために私に従うことができます.