如何解决获取地图键golang
所以我有以下结构,并且我想遍历FiniteSet以获取范围中实际键之间的所有范围。我的意思是得到不包括键的范围。 使用float64的原因是因为我也想处理Math.inf()
。我不确定这是否是最好的方法。
type (
FiniteSet struct {
set map[float64]nothing
}
nothing struct{}
Range struct {
lowerBoundary float64
upperBoundary float64
}
)
例如
map[float64]nothing {
math.Inf(-1): nothing{},1: nothing{},2: nothing{},5: nothing{},math.Inf(): nothing{}
}
我希望输出为产量
[]Range {
Range{math.inf(-1),0},Range{3,4},Range{6,math.Inf()}
}
}
如果不是那么混乱,我将包括对实现的尝试。我怀疑这只会给这个问题带来混乱。
解决方法
package main
import (
"fmt"
"math"
"sort"
)
type (
FiniteSet struct {
set map[float64]nothing
}
nothing struct{}
Range struct {
lowerBoundary float64
upperBoundary float64
}
)
func main() {
data := map[float64]nothing{
math.Inf(-1): nothing{},1: nothing{},2: nothing{},5: nothing{},math.Inf(1): nothing{},}
r := process(data)
fmt.Printf("%v\n",r)
}
func process(data map[float64]nothing) []Range {
keys := make([]float64,0)
for k := range data {
keys = append(keys,k)
}
sort.Float64s(keys)
r := make([]Range,0)
for i := 0; i < len(keys)-1; i++ {
if 1 == keys[i+1]-keys[i] {
continue
}
var current Range
if keys[i] == math.Inf(-1) {
current.lowerBoundary = keys[i]
} else {
current.lowerBoundary = keys[i] + 1
}
if keys[i+1] == math.Inf(1) {
current.upperBoundary = keys[i+1]
} else {
current.upperBoundary = keys[i+1] - 1
}
r = append(r,current)
}
return r
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。