bells
安裝本網站至主畫面:

[Nim] 語言程式教學:集合 (Set)

PUBLISHED ON MAR 4, 2018 — PROGRAMMING
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    在這裡的 set 有兩個意思,一個是數學的集合論 (set theory),一個是在 Nim 程式所實做的集合資料結構;本文不特別介紹數學理論,而會介紹如何以 Nim 進行一些集合運算。在 Nim 語言中,集合有兩種實作,一種是內建的結構,一種是透過 引入 sets 模組使用 HashSet 結構;前者僅能用於少數內建的資料型態,後者的泛用性較高;筆者覺得這樣的設計有點多餘,不過就當成 Nim 的語法特性即可。兩者使用方式大抵雷同,本文介紹 sets 套件。

    建立集合

    使用 initSet 方法可建立集合,見下例:

    import sets
    
    # Init a new integer set.
    var s = initSet[int]()
    
    # Include some elements.
    s.incl 2
    s.incl 3
    s.incl 5
    
    # Check the length of s
    assert s.len == 3
    
    # Check whether some element exists
    assert s.contains(5) == true
    assert s.contains(9) == false
    

    也可以使用 toSet 方法直接將陣列轉為集合:

    import sets
    
    # Init a new integer set from an array.
    var s = toSet([2, 2, 3, 5, 3])
    
    # Check the length of s
    assert s.len == 3
    
    # Check whether some element exists
    assert s.contains(5) == true
    assert s.contains(9) == false
    

    操作集合中的元素

    使用 incl 可新增元素,excl 可移除元素,contains 可檢查某元素是否存在於集合中。見下例:

    import sets
    
    # Init a new integer set from an array.
    var s = toSet([2, 2, 3, 5, 3])
    
    # Check the length of s.
    assert s.len == 3
    
    # Include and exclude some elements.
    s.incl(7)
    s.incl(9)
    s.excl(3)
    
    # Re-check the length of s.
    assert s.len == 4
    
    # Check whether some element exists.
    assert s.contains(7) == true
    assert s.contains(3) == false
    

    集合運算

    透過上述方法,我們可行自行進行集合運算,但集合運算相當常見,故 sets 預先實做一些常見的集合運算,節省程式設計者的時間。見下例:

    import sets
    
    # Init two sets.
    let a = toSet([1, 2, 3])
    let b = toSet([3, 5])
    
    # Union.
    let u = union(a, b)
    assert u == toSet([1, 2, 3, 5])
    
    # Intersetion.
    let i = intersection(a, b)
    assert i == toSet([3])
    
    # Difference.
    let d = difference(a, b)
    assert d == toSet([1, 2])
    
    你或許對以下產品有興趣
    Xmas tree