削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎オブジェクト: Crystal では、全てがオブジェクトです。
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎Setオブジェクト: Setオブジェクトは集合です。任意の Crystal オブジェクトを要素として持つことができますが、1つの値は重複して持てません。 Set.newに配列式<code>{ 要素1, 要素2, … 要素n }</code> などを渡し初期化します。
タグ: 2017年版ソースエディター
1,194 行
動物 ハムスター
({"イヌ", *animals, "イグアナ"}) # => {"イヌ", "ネコ", "金魚", "ハムスター", "イグアナ"}
</syntaxhighlight>
 
==== Setオブジェクト ====
Setオブジェクトは集合です。任意の Crystal オブジェクトを要素として持つことができますが、1つの値は重複して持てません。
Set.newに配列式<code>{ 要素1, 要素2, … 要素n }</code> などを渡し初期化します。
 
;コード:<syntaxhighlight lang=crystal>
animals = Set.new({ "ネコ", "金魚", "ハムスター" })
puts animals.class
animals.each do | animal |
puts "動物 #{animal}"
end
p! animals,
animals.includes?("ネコ"),
animals.includes?("イヌ")
animals.delete "ネコ"
animals.add "イヌ"
p! animals,
animals.includes?("ネコ"),
animals.includes?("イヌ")
animals = Set.new({ "ネコ", "イヌ", "金魚", "ハムスター", "カナリヤ", "クサガメ" })
mammals = Set.new({ "ネコ", "イヌ", "ハムスター" })
p! animals , mammals,
animals & mammals,
animals | mammals,
animals + mammals,
animals ^ mammals,
animals - mammals,
mammals - animals
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Set(String)
動物 ネコ
動物 金魚
動物 ハムスター
animals # => Set{"ネコ", "金魚", "ハムスター"}
animals.includes?("ネコ") # => true
animals.includes?("イヌ") # => false
animals # => Set{"金魚", "ハムスター", "イヌ"}
animals.includes?("ネコ") # => false
animals.includes?("イヌ") # => true
animals # => Set{"ネコ", "イヌ", "金魚", "ハムスター", "カナリヤ", "クサガメ"}
mammals # => Set{"ネコ", "イヌ", "ハムスター"}
animals & mammals # => Set{"ネコ", "イヌ", "ハムスター"}
animals | mammals # => Set{"ネコ", "イヌ", "金魚", "ハムスター", "カナリヤ", "クサガメ"}
animals + mammals # => Set{"ネコ", "イヌ", "金魚", "ハムスター", "カナリヤ", "クサガメ"}
animals ^ mammals # => Set{"金魚", "カナリヤ", "クサガメ"}
animals - mammals # => Set{"金魚", "カナリヤ", "クサガメ"}
mammals - animals # => Set{}
</syntaxhighlight>
 
1,220 ⟶ 1,274行目:
このように、Crystalではforがなくてもコレクションのメソッドで同様の処理を実現できます。
 
===== loop =====
loop ありません。
while true で代用します。