Golang Group按键+合并数组值

ina*_*gnu 5 go

我正在尝试将多个数组的数组值与相同的键合并(按+组合排序),Golang中是否有任何本机方式来转换此输入

input = [
    [
        { a: 1, b: [1,2]},
        { a: 2, b: [1,2]},
        { a: 3, b: [1,2]}
    ],
    [
        { a: 1, b: [3,4]},
        { a: 2, b: [3,4]},
        { a: 3, b: [3,4]},
        { a: 4, b: [3,4]}
    ],
    [
        { a:1, b: [5,6]},
        { a:2, b: [5,6]},
        { a:3, b: [5,6]},
        { a:4, b: [5,6]},
        { a:5, b: [5,6]}
    ]
 ]
Run Code Online (Sandbox Code Playgroud)

output = [
    { a: 1, b: [1,2,3,4,5,6]},
    { a: 2, b: [1,2,3,4,5,6]},
    { a: 3, b: [1,2,3,4,5,6]},
    { a: 4, b: [3,4, 5,6]},
    { a: 5, b: [5,6]},
]
Run Code Online (Sandbox Code Playgroud)

谢谢

Dar*_*tle 11

你的代码不是Go代码(它将作为Ruby传递),而且没有明确的尝试来实际解决问题,这可能是你得到一些downvotes而没有答案的原因.

一种方法是将你的代码解释为Ruby,用input一片切片的地图(字符串,也许,虽然Ruby会将它们视为符号)作为整数(在情况下a)或切片的整数(在的情况b).您可以使用空接口(interface{})使用地图值执行此操作,但使用这样的结构会更直接:

type ab struct {
    a int
    b []int
}
Run Code Online (Sandbox Code Playgroud)

并且input是一个[][]ab.但只要我们重组的数据,以更好地适应语言,它更直截了当地废除ab干脆带着一张地图,其中替换该结构a值的键和b值是值.事情是一个简单的问题迭代input和附加切片output:

package main

import "fmt"

func main() {
    input := []map[int][]int{
        {
            1: []int{1, 2},
            2: []int{1, 2},
            3: []int{1, 2},
        },
        {
            1: []int{3, 4},
            2: []int{3, 4},
            3: []int{3, 4},
            4: []int{3, 4},
        },
        {
            1: []int{5, 6},
            2: []int{5, 6},
            3: []int{5, 6},
            4: []int{5, 6},
            5: []int{5, 6},
        },
    }

    output := make(map[int][]int)

    for _, m := range input {
        for k, v := range m {
            output[k] = append(output[k], v...)
        }
    }

    fmt.Println(output)
}
Run Code Online (Sandbox Code Playgroud)

这会产生输出:

map[1:[1 2 3 4 5 6] 2:[1 2 3 4 5 6] 3:[1 2 3 4 5 6] 4:[3 4 5 6] 5:[5 6]]
Run Code Online (Sandbox Code Playgroud)

output 因此,根据表示数据组织的修改方式,可以按照您的需要组织数据.