make loop

This commit is contained in:
chai2010
2015-12-26 20:05:30 +08:00
parent 82ec0c025d
commit e15e88dad7
74 changed files with 207 additions and 207 deletions

View File

@@ -2,7 +2,7 @@
Go語言里的集合一般會用map[T]bool這種形式來表示T代表元素類型。集合用map類型來表示雖然非常靈活但我們可以以一種更好的形式來表示它。例如在數據流分析領域集合元素通常是一個非負整數集合會包含很多元素併且集合會經常進行併集、交集操作這種情況下bit數組會比map表現更加理想。(譯註這里再補充一個例子比如我們執行一個http下載任務把文件按照16kb一塊劃分爲很多塊需要有一個全局變量來標識哪些塊下載完成了這種時候也需要用到bit數組)
一個bit數組通常會用一個無符號數或者稱之爲“字”的slice或者來表示每一個元素的每一位都表示集合里的一個值。當集合的第i位被設置時我們説這個集合包含元素i。下面的這個程序展示了一個簡單的bit數組類型併且實現了三個函數來對這個bit數組來進行操作
一個bit數組通常會用一個無符號數或者稱之爲“字”的slice或者來表示每一個元素的每一位都表示集合里的一個值。當集合的第i位被設置時我們説這個集合包含元素i。下面的這個程序展示了一個簡單的bit數組類型併且實現了三個函數來對這個bit數組來進行操作
```go
gopl.io/ch6/intset
@@ -103,7 +103,7 @@ func (*IntSet) Copy() *IntSet // return a copy of the set
練習6.2: 定義一個變參方法(*IntSet).AddAll(...int)這個方法可以爲一組IntSet值求和比如s.AddAll(1,2,3)。
練習6.3: (*IntSet).UnionWith會用|操作符計算兩個集合的交集我們再爲IntSet實現另外的幾個函數IntersectWith(交集元素在A集合B集合均現),DifferenceWith(差集:元素現在A集合現在B集合),SymmetricDifference(併差集:元素現在A但沒有現在B或者現在B沒有現在A)。
練習6.3: (*IntSet).UnionWith會用|操作符計算兩個集合的交集我們再爲IntSet實現另外的幾個函數IntersectWith(交集元素在A集合B集合均現),DifferenceWith(差集:元素現在A集合現在B集合),SymmetricDifference(併差集:元素現在A但沒有現在B或者現在B沒有現在A)。
練習6.4: 實現一個Elems方法返迴集合中的所有元素用於做一些range之類的遍歷操作。
練習6.5: 我們這章定義的IntSet里的每個字都是用的uint64類型但是64位的數值可能在32位的平颱上不高效。脩改程序使其使用uint類型這種類型對於32位平颱來説更合適。當然了這里我們可以不用簡單粗暴地除64可以定義一個常量來決定是用32還是64這里你可能會用到平颱的自動判斷的一個智能表達式32 << (^uint(0) >> 63)