繁体   English   中英

从结构切片中获取指定字段的切片

[英]get slice of specified field from slice of structs

我有一片包含 10 辆汽车的结构,例如:

type struct car {
    engine
    window
    wheel
}

所以 slice cars 包含 10 个 car 结构。

我想知道 function 是否存在,例如:

var engines string[] = cars.Getfield("engine") // engines will contain 10 engines names

为此没有图书馆 function 。

您可以使用反射package 手动实现

例子:

type Cars []Car

func (cars Cars) getFieldString(field string) []string {
    var data []string
    for _, car := range cars {
        r := reflect.ValueOf(car)
        f := reflect.Indirect(r).FieldByName(field)
        data = append(data, f.String())
    }
    return data
}

操场代码在这里

Go 中没有 generics(至少在 2.0 之前没有),所以那里没有很多辅助功能。

如果您需要经常使用此 function,您可以将其实现为类型engines的方法。

@Joe-Akanesuvan回答下回答@RodolfoAP问题(没有足够的代表发表评论):
尽管 generics 现在是 Go 的一部分,但 std 中没有函数式编程库,我使用了我在awesome-go上找到的第一个库,所以这可能不是生产就绪代码,但通常看起来就是这样像:

package main

import (
    "fmt"

    fp "github.com/repeale/fp-go"
)

type data struct {
    field        string
    anotherField int
}

func main() {
    fmt.Printf(
        "result: %+v",
        fp.Map(func(d data) string { return d.field })(
            []data{
                {
                    field:        "apple",
                    anotherField: 1,
                },
                {
                    field:        "orange",
                    anotherField: 2,
                },
                {
                    field:        "banana",
                    anotherField: 3,
                },
            },
        ),
    )
}

代码 output:

result: [apple orange banana]

操场上的代码在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM