gpt4 book ai didi

go - 如何比较公共(public)键的 map 并打印输出?

转载 作者:IT王子 更新时间:2023-10-29 02:32:14 26 4
gpt4 key购买 nike

我有以下生成以下输出的代码

代码:

package main

import (
"html/template"
"os"
)

type EntetiesClass struct {
Name string
Value int32
}

// In the template, we use rangeStruct to turn our struct values
// into a slice we can iterate over
var htmlTemplate = `{{range $index, $element := .}}
{{range $element}}{{.Name}}={{.Value}}
{{- end}}
{{- end}}`

func main() {
data := map[string][]EntetiesClass{
"Container1": {{"Test", 15}},
"Container2": {{"Test", 15}},
}

t := template.New("t")
t, err := t.Parse(htmlTemplate)
if err != nil {
panic(err)
}

err = t.Execute(os.Stdout, data)
if err != nil {
panic(err)
}

}

链接:https://play.golang.org/p/yM9_wWmyLY
输出:

测试=15测试=15

我想比较 Container1 和 Container2,如果它们有公共(public) key ,我只想打印一次输出。

输出:测试=15

我怎样才能做到这一点?感谢任何帮助?

最佳答案

我可以想到两种方法来做到这一点:

  1. 在传递给模板执行之前删除您的数据

    这意味着您可以在传递给 t.Execute 之前预处理数据以消除重复项。你可以使用类似的东西来做到这一点:

    m := map[EntitiesClass]bool{}
    for _, ... {
    m[ec] = true
    // Or maybe you want to aggregate "Container 1"
    // and "Container 2" in some way
    }

    然后你可以只传递处理过的数据,模板本身几乎保持不变

  2. 添加 custom function for your template

    这意味着您可以添加一个普通的 go 函数,它接收任意数量的 EntitiesClass 并返回它们去重(可能使用选项 1 中的机制)。

    你甚至可以这样做:

    {{if not customHaveSeenThisValueBefore }}
    ...
    {{ endif }}

对于您的简单示例,我会选择选项 1,让模板非常简单似乎是最简单的。

关于go - 如何比较公共(public)键的 map 并打印输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com