This commit is contained in:
Xargin 2016-10-24 14:35:24 +08:00
parent d3ce2c9ba6
commit bb71ca05f5

View File

@ -2,7 +2,7 @@
Go语言里的集合一般会用map[T]bool这种形式来表示T代表元素类型。集合用map类型来表示虽然非常灵活但我们可以以一种更好的形式来表示它。例如在数据流分析领域集合元素通常是一个非负整数集合会包含很多元素并且集合会经常进行并集、交集操作这种情况下bit数组会比map表现更加理想。(译注这里再补充一个例子比如我们执行一个http下载任务把文件按照16kb一块划分为很多块需要有一个全局变量来标识哪些块下载完成了这种时候也需要用到bit数组) Go语言里的集合一般会用map[T]bool这种形式来表示T代表元素类型。集合用map类型来表示虽然非常灵活但我们可以以一种更好的形式来表示它。例如在数据流分析领域集合元素通常是一个非负整数集合会包含很多元素并且集合会经常进行并集、交集操作这种情况下bit数组会比map表现更加理想。(译注这里再补充一个例子比如我们执行一个http下载任务把文件按照16kb一块划分为很多块需要有一个全局变量来标识哪些块下载完成了这种时候也需要用到bit数组)
一个bit数组通常会用一个无符号数或者称之为“字”的slice或者来表示每一个元素的每一位都表示集合里的一个值。当集合的第i位被设置时我们才说这个集合包含元素i。下面的这个程序展示了一个简单的bit数组类型并且实现了三个函数来对这个bit数组来进行操作 一个bit数组通常会用一个无符号数或者称之为“字”的slice来表示每一个元素的每一位都表示集合里的一个值。当集合的第i位被设置时我们才说这个集合包含元素i。下面的这个程序展示了一个简单的bit数组类型并且实现了三个函数来对这个bit数组来进行操作
<u><i>gopl.io/ch6/intset</i></u> <u><i>gopl.io/ch6/intset</i></u>
```go ```go
@ -55,7 +55,7 @@ func (s *IntSet) String() string {
for j := 0; j < 64; j++ { for j := 0; j < 64; j++ {
if word&(1<<uint(j)) != 0 { if word&(1<<uint(j)) != 0 {
if buf.Len() > len("{") { if buf.Len() > len("{") {
buf.WriteByte('}') buf.WriteByte(' ')
} }
fmt.Fprintf(&buf, "%d", 64*i+j) fmt.Fprintf(&buf, "%d", 64*i+j)
} }