Golang - Как убрать строку из матрицы? - PullRequest
0 голосов
/ 04 июня 2018

Итак, у меня есть этот 2D-срез, например:

s := [][]int{
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11},
}

fmt.Println(s)

//Outputs: [[0 1 2 3] [4 5 6 7] [8 9 10 11]]

Как удалить полную строку из этого 2D-среза, чтобы результат выглядел следующим образом, если я решу удалить среднюю строку:

[[0 1 2 3] [8 9 10 11]]

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Формула для удаления строки по индексу i:

s = append(s[:i], s[i+1:])

Вот рабочий пример:

package main

import (
    "fmt"
)

func main() {
    s := [][]int{
        {0, 1, 2, 3},
        {4, 5, 6, 7}, // This will be removed.
        {8, 9, 10, 11},
    }

    // Delete row at index 1 without modifying original slice by
    // appending to a new slice.
    s2 := append([][]int{}, append(s[:1], s[2:]...)...)
    fmt.Println(s2)

    // Delete row at index 1. Original slice is modified.
    s = append(s[:1], s[2:]...)
    fmt.Println(s)
}

Попробуйте на игровой площадке Go .

Рекомендую прочитать Трюки с слайсом .Некоторые приемы можно применять и к многомерным ломтикам.

0 голосов
/ 04 июня 2018

Вы можете попробовать следующее:

i := 1
s = append(s[:i],s[i+1:]...)

Вы можете попробовать рабочий код на игровой площадке Golang

Другой альтернативный способ - использовать следующее:

i := 1
s = s[:i+copy(s[i:], s[i+1:])]

Детская площадка на Голанге

...