1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| package main
import ( "fmt" "sort" )
func arraySource(in ...int) <-chan int { out := make(chan int)
go func() { for _, i := range in { out <- i } close(out) }()
return out }
func arraySort(in <-chan int) <-chan int { out := make(chan int)
go func() { temp := []int{}
for v := range in { temp = append(temp, v) }
sort.Ints(temp)
for _, v := range temp { out <- v }
close(out) }()
return out }
func arrayMerge(in1, in2 <-chan int) <-chan int { out := make(chan int)
go func() { for { v1, ok1 := <-in1 v2, ok2 := <-in2
if !ok1 && !ok2 { break }
if ok1 && ok2 { if v1 <= v2 { out <- v1 } else { out <- v2 } continue }
if ok1 && !ok2 { out <- v1 } else { out <- v2 }
}
close(out) }()
return out }
func main() { p := arraySource(1, 2, 3, 4, 5)
for { if v, ok := <-p; ok { fmt.Println(v) } else { break } } fmt.Println("--------------------------------")
p2 := arraySource(1, 2, 3, 4, 5)
for v := range p2 { fmt.Println(v) } fmt.Println("--------------------------------")
p3 := arraySort(arraySource(5, 6, 21, 1, 7, 10))
for v := range p3 { fmt.Println(v) } fmt.Println("--------------------------------")
p4 := arrayMerge( arraySort(arraySource(5, 6, 21, 1, 7, 10)), arraySort(arraySource(15, 6, 21, 4, 3, 100)), )
for v := range p4 { fmt.Println(v) } }
|