Set
一個Set代表一個集合,它在結構上是一個重復的無序數組
assert Set.from([1, 2, 3, 2, 1]) == {1, 2, 3}
assert {1, 2} == {1, 1, 2} # 重復的被自動刪除
assert {1, 2} == {2, 1}
它也可以用類型和長度來聲明
a: {Int; 3} = {0, 1, 2} # OK
b: {Int; 3} = {0, 0, 0} # NG,重復的內容被刪除,長度也會改變
# TypeError: the type of b is mismatched
# expected: Set(Int, 3)
# but found: Set({0, }, 1)
此外,只有實現Eq
跟蹤的對象才能成為集合的元素
因此,不可能使用Floats等作為集合元素
d = {0.0, 1.0} # NG
#
# 1│ d = {0.0, 1.0}
# ^^^^^^^^
# TypeError: the type of _ is mismatched:
# expected: Eq(Float)
# but found: {0.0, 1.0, }
Set可以執行集合操作
assert 1 in {1, 2, 3}
assert not 1 in {}
assert {1} or {2} == {1, 2}
assert {1, 2} and {2, 3} == {2}
assert {1, 2} not {2} == {1}
Set是同質集合。為了使不同類的對象共存,它們必須同質化
s: {Int or Str} = {"a", 1, "b", -1}
Sets為類型
Sets也可以被視為類型。這種類型稱為 枚舉類型
i: {1, 2, 3} = 1
assert i in {1, 2, 3}
Set的元素直接是類型的元素 請注意,這些Set本身是不同的
mut_set = {1, 2, 3}.into {Int; !3}
mut_set.insert!(4)