Senior
/** * Ühenda N kanalit üheks * * On antud n kanalit tüüpi chan int. Tuleb kirjutada funktsioon, mis ühendab kõik andmed **/ // 1. Vajalik on rakendada funktsioon, mis ühendab N kanalit üheks func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Täitke kanalid a, b, c väärtustega // ...
sobes.tech AI
Vastus AI-lt
go func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int)
var wg sync.WaitGroup
wg.Add(len(chs))
for _, ch := range chs {
go func(c <-chan int) {
defer wg.Done()
for val := range c {
mergedCh <- val
} }(ch) }
go func() {
wg.Wait()
close(mergedCh)
}()
return mergedCh
}
// Näide kanalite a, b, c täitmisest func main() { a := make(chan int, 3) b := make(chan int, 3) c := make(chan int, 3)
a <- 1
a <- 2
a <- 3
close(a)
b <- 4
b <- 5
b <- 6
close(b)
c <- 7
c <- 8
c <- 9
close(c)
merged := joinChannels(a, b, c)
for val := range merged {
fmt.Println(val)
}
}
// Selles näites alustab joinChannels iga sisendkanali jaoks gorutina, loeb sellest ja saadab andmed ühisesse kanalisse mergedCh. Pärast kõigi algsete kanalite sulgemist ja töötlemist sulgub ka ühine kanal. See võimaldab mitme andmevoo ühendamist ühte kanalisse mugavaks lugemiseks.