標籤:app bre break 沒有 bit add word nbsp fun
練習 6.3: (*IntSet).UnionWith會用|操作符計算兩個集合的交集,我們再為IntSet實現另外的幾個函數IntersectWith(交集:元素在A集合B集合均出現),DifferenceWith(差集:元素出現在A集合,未出現在B集合),SymmetricDifference(並差集:元素出現在A但沒有出現在B,或者出現在B沒有出現在A)。
*練習6.4: 實現一個Elems方法,返回集合中的所有元素,用於做一些range之類的遍曆操作。
練習 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)。*///交集:元素在A集合B集合均出現func (s *IntSet) IntersectWith(t *IntSet) IntSet { var result IntSet for i, word := range s.words { if i >= len(t.words) { break } result.words = append(result.words, word&t.words[i]) } return result}//差集:元素出現在A集合,未出現在B集合func (s *IntSet) DifferenceWith(t *IntSet) IntSet { var result IntSet for i, word := range s.words { if i >= len(t.words) { result.words = append(result.words, word) continue } result.words = append(result.words, word&(word^t.words[i])) } return result}//並差集:元素出現在A但沒有出現在B,或者出現在B沒有出現在Afunc (s *IntSet) SymmetricDifference(t *IntSet) IntSet { var result IntSet for i, word := range s.words { if i >= len(t.words) { result.words = append(result.words, word) continue } result.words = append(result.words, word^t.words[i]) } return result}//練習6.4: 實現一個Elems方法,返回集合中的所有元素,用於做一些range之類的遍曆操作。func (s *IntSet) Elems() []int { var result []int for i, word := range s.words { for j := 0; j < 64; j++ { if word&(1<<uint(j)) != 0 { result = append(result, 64*i+j) } } } return result}//練習 6.2: 定義一個變參方法(*IntSet).AddAll(...int),這個方法可以添加一組IntSet,比如s.AddAll(1,2,3)。func (s *IntSet) AddAll(elements ...int) { for _, r := range elements { s.Add(r) }}
[日常] Go語言聖經-指標對象的方法-bit數組習題2