小编elp*_*res的帖子

是否可以将多个通道复用为一个?

想法是在切片中具有可变数量的通道,将通过它们接收的每个值推送到单个通道中,并且在最后一个输入通道关闭时关闭该输出通道.这样的东西,但对于多个渠道超过两个:

func multiplex(cin1, cin2, cout chan int) {
    n := 2
    for {
        select {
        case v, ok := <-cin1:
            if ok {
                cout <- v
            } else {
                n -= 1
            }

        case v, ok := <-cin2:
            if ok {
                cout <- v
            } else {
                n -= 1
            }
        }

        if n == 0 {
            close(cout)
            break
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码避免了繁忙的循环,因为没有任何default情况,这是好的(编辑:它看起来像",ok"的存在使得select语句非阻塞而且循环很忙.但是为了示例的缘故,把代码想象成会阻止它.使用任意数量的输入通道也可以实现相同的功能吗?显然,这可以通过将切片成对地减少到单个通道来完成,但如果可能的话,我会对更简单的解决方案更感兴趣.

concurrency channel go

12
推荐指数
1
解决办法
5530
查看次数

在Go中理解`interface {}`的用法的问题

我正在尝试将算法从Python移植到Go.它的核心部分是使用dicts构建的树,它应该保持这种方式,因为每个节点可以有任意数量的子节点.所有叶子都处于同一水平,所以最高水平的dicts包含其他dicts,而最低水平的叶子包含浮动.像这样:

tree = {}
insert(tree, ['a', 'b'], 1.0)
print tree['a']['b']
Run Code Online (Sandbox Code Playgroud)

因此,在尝试将代码移植到Go同时学习语言时,这就是我开始测试基本思想的原因:

func main() {
    tree := make(map[string]interface{})
    tree["a"] = make(map[string]float32)
    tree["a"].(map[string]float32)["b"] = 1.0
    fmt.Println(tree["a"].(map[string]float32)["b"])
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作,因此下一步是将其转换为采用"树",路径和值的例程.我选择了递归方法并想出了这个:

func insert(tree map[string]interface{}, path []string, value float32) {
    node := path[0]
    l := len(path)
    switch {
    case l > 1:
        if _, ok := tree[node]; !ok {
            if l > 2 {
                tree[node] = make(map[string]interface{})
            } else {
                tree[node] = make(map[string]float32)
            }
        }
        insert(tree[node], path[1:], value) //recursion
    case l == 1:
        leaf := tree …
Run Code Online (Sandbox Code Playgroud)

go

2
推荐指数
2
解决办法
503
查看次数

如何将变音符号与正则表达式匹配?

在德语文本中,变音符号(ä,ü,ö)和eszett(ß)是常规字母,但它们似乎没有被\w特殊字符覆盖:

In [1]: re.match('(\w+)', 'Straße').groups()
Out[1]: ('Stra',)
Run Code Online (Sandbox Code Playgroud)

传递re.UNICODE旗帜re.match并没有改变任何东西.

有没有更好的方法来匹配除了以外的完整单词[a-zA-ZäüöÄÜÖß]+

python regex python-2.x

2
推荐指数
1
解决办法
3899
查看次数

标签 统计

go ×2

channel ×1

concurrency ×1

python ×1

python-2.x ×1

regex ×1