为了账号安全,请及时绑定邮箱和手机立即绑定

去循环频道,但缺少索引

去循环频道,但缺少索引

Go
拉莫斯之舞 2021-12-07 18:36:47
在通道上循环时,我想获得一个索引 - 以便能够添加到数组中。package mainimport (  "fmt")func main() {  tasks := []string{"foo", "bar", "baz"}  results := process(tasks)  for result := range results { // index?    fmt.Println(result) // I would like to add result to an array of results?    // newresults[index] = result???  }}func process(tasks []string) <-chan string {  ch := make(chan string)  go func() {    for index, task := range tasks {      ch <- fmt.Sprintf("processed task %d: %s", index, task)    }    close(ch)  }()  return ch}
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

替代 peterSO 的答案,您可以简单地使用append添加到切片的末尾。


查看完整回答
反对 回复 2021-12-07
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

例如,


i := 0

for result := range results {

    fmt.Println(result)

    newresults[i] = result

    i++

}


查看完整回答
反对 回复 2021-12-07
?
DIEA

TA贡献1820条经验 获得超2个赞

频道没有索引。如果要跟踪计数,请创建自己的计数变量并在 for 循环内递增。


另一种方法是创建一个带有索引和任务名称的结构。


package main


import (

    "fmt"

)


type Task struct {

    Index int

    Task  string

}


func main() {

    tasks := []string{"foo", "bar", "baz"}

    results := process(tasks)

    myresults := make([]*Task, 3)


    for result := range results { // index?

        fmt.Println(result) // I would like to add result to an array of results?

        // results[index] = result???

        myresults[result.Index] = result

    }

}


func process(tasks []string) <-chan *Task {

    ch := make(chan *Task)

    go func() {

        for index, task := range tasks {

            t := &Task{Index: index, Task: task}

            ch <- t

            // ch <- fmt.Sprintf("processed task %d: %s", index, task)

        }

        close(ch)

    }()

    return ch

}


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信