簡體   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