gpt4 book ai didi

dictionary - 获取 map 键之间的所有范围

转载 作者:行者123 更新时间:2023-12-01 22:10:36 24 4
gpt4 key购买 nike

因此,我具有以下结构,并且我想遍历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
}

关于dictionary - 获取 map 键之间的所有范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63980382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com