golang struct array转换

时间:2015-11-13 09:30:16

标签: arrays struct go

我的结构如下:

type Foo struct{
  A string
  B string
}

type Bar struct{
  C string
  D Baz
}

type Baz struct{
  E string
  F string
}

假设我有[]Bar,如何将其转换为[]Foo

A应为C

B应为E

2 个答案:

答案 0 :(得分:4)

我认为没有任何“神奇”的转换方式。但是,创建它只是一小段代码。这样的事情应该可以解决问题。

func BarsToFoos(bs []Bar) []Foo {
  var acc []Foo

  for _, b := range bs {
    newFoo := Foo{A: b.C, B: b.D.E}  // pulled out for clarity
    acc = append(acc, newFoo)
  }

  return acc
}

答案 1 :(得分:1)

例如,简洁地最小化内存分配和使用,

package main

import "fmt"

type Foo struct {
    A string
    B string
}

type Bar struct {
    C string
    D Baz
}

type Baz struct {
    E string
    F string
}

func FooFromBar(bs []Bar) []Foo {
    fs := make([]Foo, 0, len(bs))
    for _, b := range bs {
        fs = append(fs, Foo{
            A: b.C,
            B: b.D.E,
        })
    }
    return fs
}

func main() {
    b := []Bar{{C: "C", D: Baz{E: "E", F: "F"}}}
    fmt.Println(b)
    f := FooFromBar(b)
    fmt.Println(f)
}

输出:

[{C {E F}}]
[{C E}]