Golang中如何将二维数组转换为一维数组

Golang中如何将二维数组转换为一维数组 我需要从二维数组中提取一列到一维数组中。 我尝试在网上搜索但没有成功。 有人能帮忙吗? 谢谢

7 回复

你好 petrus 感谢你的建议和帮助。 非常感谢。

更多关于Golang中如何将二维数组转换为一维数组的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢大家的快速回复。这个方法有效。但我在想,我是否可以转置输入并读取行。这样可行吗?

你拥有的是行切片还是列切片?

如果是列切片,你可以直接使用 foo[n]。如果是行切片,你需要使用循环并构建一个包含单独列的结果切片。

func main() {
    fmt.Println("hello world")
}

感谢您的快速回复。 以下是相关信息。

输入:x [ ][ ] float64 {{1,2,3},{4,5,6},{7,8,9}} 期望输出:y [ ] float64 例如:[2,5,8]

float64 {{1,2,3},{4,5,6},{7,8,9}}

package main

import "log"

func main() {
  var input = [][]float64{{1,2,3},{4,5,6},{7,8,9}}
  var result = []float64{}
 
  for _, arr := range input {
    for _, item := range arr {
      result = append(result, item)
    }
  }

  log.Println(result)
}

这会得到一个包含所有值的单一片段,回到 Nobbz 的答案。如果你需要这方面的帮助,可以这样做:

package main

import "log"

func main() {
  var input = [][]float64{{1,2,3},{4,5,6},{7,8,9}}
  var row = 1

  var result = []float64{}
  for _, column := range input {
    result = append(result, column[row])
  }

  log.Println(result)
}

输入:x float64 {{1,2,3},{4,5,6},{7,8,9}} 期望输出 y float64 例如:[2,5,8]

package main

import "fmt"

func column(x [][]float64, col int) []float64 {
	y := make([]float64, 0, len(x))
	for _, row := range x {
		if col < 0 || col >= len(row) {
			return nil
		}
		y = append(y, row[col])
	}
	return y[0:len(y):len(y)]
}

func main() {
	x := [][]float64{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
	fmt.Println(x)
	y := column(x, 1)
	fmt.Println(y)
}

Go Playground - The Go Programming Language

[[1 2 3] [4 5 6] [7 8 9]]
[2 5 8]

在Go中,可以通过遍历二维数组的指定列来提取数据到一维数组。以下是示例代码:

package main

import "fmt"

func main() {
    // 示例二维数组(3行2列)
    matrix := [3][2]int{
        {1, 2},
        {3, 4},
        {5, 6},
    }
    
    // 提取第1列(索引0)到一维数组
    colIndex := 0
    result := make([]int, len(matrix))
    
    for i := 0; i < len(matrix); i++ {
        result[i] = matrix[i][colIndex]
    }
    
    fmt.Println(result) // 输出: [1 3 5]
}

如果二维数组是切片形式,处理方式类似:

package main

import "fmt"

func main() {
    // 示例二维切片
    matrix := [][]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }
    
    // 提取第2列(索引1)到一维切片
    colIndex := 1
    result := make([]int, len(matrix))
    
    for i := 0; i < len(matrix); i++ {
        if colIndex < len(matrix[i]) {
            result[i] = matrix[i][colIndex]
        }
    }
    
    fmt.Println(result) // 输出: [2 5 8]
}

对于不规则长度的二维切片,建议添加边界检查:

func extractColumn(matrix [][]int, colIndex int) []int {
    result := make([]int, 0, len(matrix))
    
    for _, row := range matrix {
        if colIndex < len(row) {
            result = append(result, row[colIndex])
        }
    }
    
    return result
}
回到顶部