在Go ...容器分配错误中合并两个数组

时间:2013-08-31 20:20:24

标签: arrays sorting merge go mergesort

我试图弄清楚我的代码今天早上出了什么问题,但却无法解决。它说它不能分配容器。请查看此go play http://play.golang.org/p/RQmmi7nJAK

问题代码如下。

 func My_Merge(container []int, first_index int, mid_index int, last_index int) {
      left_array := make([]int, mid_index-first_index+1)
      right_array := make([]int, last_index-mid_index)
      temp_i := 0
      temp_j := 0

      for i := first_index; i < mid_index; i++ {
           left_array[temp_i] = container[i]
           temp_i++
      }

      for j := mid_index; j < last_index+1; j++ {
           right_array[temp_j] = container[j]
           temp_j++
      }

      i := 0
      j := 0

      for elem := first_index; elem < len(container); elem++ {
           if left_array[i] <= right_array[j] {
                container[elem] = left_array[i]
                i++
                if i == len(left_array) {
                     container[elem+1:last_index] = right_array[j:]
                     break              
                }           
           } else {
                container[elem] = right_array[j]
                j++
                if j == len(right_array) {
                     container[elem+1:last_index] = left_array[i:]
                     break              
                }
           }
      }
 }

我收到了行容器中的错误[elem + 1:last_index] = right_array [j:]。 即使我删除整个块,我也会收到错误。有人可以帮我吗?我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您无法在Go中指定切片表达式。你需要使用副本:

copy(container[elem+1:last_index], right_array[j:])

但显然还有其他问题,因为当我在操场上改变它时,我得到一个索引超出范围错误。