【发布时间】:2014-06-17 16:07:28
【问题描述】:
我目前有以下代码:
package main
import (
"fmt"
"math/rand"
"time"
)
var channel = make(chan []float32, 1)
func main() {
aMap := initMap()
for key := range aMap {
fmt.Print("the iteration number is: ", key)
theSlice := aMap[key]
channel <- theSlice
go transition(channel)
time.Sleep(2 * time.Second)
}
}
func transition(channel chan []float32) {
newSlice := make([]float32,5)
newSlice = <- channel
fmt.Println(newSlice)
//need to retrieve the last element of the other slice and put it on this newSlice
}
func initMap() map[int][]float32 {
aMap := make(map[int][]float32)
for i := 0; i < 2; i++ {
aMap[i] = []float32{rand.Float32(), rand.Float32(), rand.Float32(), rand.Float32(), rand.Float32()}
}
return aMap
}
我们有一个包含两个切片的地图,我想要做的是获取 slice1 的最后一个元素并将其设置为 slice2 的最后一个元素,反之亦然。
我实际上正在从事一个更大的项目,该项目涉及模拟细胞的分裂和分化。由于它是一个模拟,所有的划分和差异化都是同时进行的。问题在于分化,其中 A 型细胞转化为 B 型细胞。每种类型的单元格都存储在不同的数据结构中,我想我可以为每种不同的数据结构使用一个通道,并使用这些通道同时更改数据。
希望这是有道理的。有什么建议吗?
谢谢, CJ
编辑:看来我要问的还不清楚。我对上面示例的问题是,我将如何同时更改两个切片中每个切片的最后一个元素?
【问题讨论】:
-
我添加了一个编辑来澄清我在问什么。谢谢
标签: concurrency go channel goroutine