Как я могу сравнить значения в 2D-массиве со значениями в 1D-массиве в GoLang?

#arrays #go #int32 #absolute-value #type-2-dimension

#массивы #Вперед #int32 #абсолютное значение #тип-2-измерение

Вопрос:

Мне нужно сравнить значения 1D-массива и 2D-массива и вернуть результирующий массив, который имеет аналогичные значения, используя Go:

 func absolutePermutation(n int32, k int32) []int32 {
    var position []int32

    var i, j int32
    var result []int32
    for i = 1; i <= n; i   {
        position[i-1] = i
    }

    x := getPermutations(position)
    resVal := permNum(n)
    fmt.Println(x)

    for i = 0; i < resVal; i   {

        for j = 0; j < 4; j   {

            fmt.Println(x[i][j])

            **if int32(math.Abs(float64(position[(j*resVal) i])-float64(x[i][j]))) == k** {
                result[i] = x[i][j]
            } else {
                continue
            }
        }
    }

    return result
}

func getPermutations(elements []int32) [][]int32 {
    permutations := [][]int32{}
    if len(elements) == 1 {
        permutations = [][]int32{elements}
        return permutations
    }
    for i := range elements {
        el := make([]int32, len(elements))
        copy(el, elements)

        for _, perm := range getPermutations(append(el[0:i], el[i 1:]...)) {
            permutations = append(permutations, append([]int32{elements[i]}, perm...))
        }
    }
    return permutations
}


func permNum (n int32) int32 {

    if n == 0 {
        return 1
    } 
    
    return n * permNum(n-1)
}
  

Я попытался создать позицию (1D-массив в 2D-массив здесь.), Но это не имело смысла.
Как новичок в GoLang, я получаю эту ошибку в этом коде, который написан для получения перестановки заданного числа:

ошибка времени выполнения: индекс выходит за пределы диапазона [0] с длиной 0

Ответ №1:

В какой-то степени я решил. вы можете обратиться к этому.

  func absolutePermutation(n int32, k int32) []int32 {
        var buffer [1024 * 1024]int32
        position := buffer[0:n]
        result := make([]int32, n)    
        var i, j int32
    
    for i = 1; i <= n; i   {
        position[i-1] = i
    }
    x := getPermutations(position)

    for i = 0; i < permNum(n); i   {
        for j = 0; j < n; j   {  
            if int32(math.Abs(float64(position[j])-float64(x[i][j]))) == k {
                result[j] = x[i][j]
                if j==n-1{
                    return result
                }       
            }else{
            break
            }
        }
    }
    result = nil
    return result    
}