gpt4 book ai didi

arrays - 使用与值匹配的键对映射数组进行排序 GO

转载 作者:IT王子 更新时间:2023-10-29 01:52:07 26 4
gpt4 key购买 nike

我刚开始使用 Golang 编程,想要对一组映射进行排序。我有一系列 map 。我们称它为 example_array。

example_array = [
[
{ Name: "A", Value: 100 },
{ Name: "B", Value: 60 },
{ Name: "C", Value: 170 },
{ Name: "D", Value: 120}
],
[
{ Name: "A", Value: 64 },
{ Name: "B", Value: 90 },
{ Name: "C", Value: 52 },
{ Name: "D", Value: 98}
],
[
{ Name: "A", Value: 154 },
{ Name: "B", Value: 190 },
{ Name: "C", Value: 179 },
{ Name: "D", Value: 67 }
]

]

现在我想使用键 "C" 的值对这个数组进行排序,所以 example_array 应该修改为 ->

[
[{Name: "A", Value: 64}, {Name: "B", Value: 90}, {Name: "C", Value: 52}, {Name: "D", Value: 98}],
[{Name: "A", Value: 100}, {Name: "B", Value: 60}, {Name: "C", Value: 170}, {Name: "D", Value: 120}],
[{Name: "A", Value: 154}, {Name: "B", Value: 190}, {Name: "C", Value: 179}, {Name: "D", Value: 67}]
]

如果我使用键 "D" 的值对原始数组进行排序,则原始数组应修改为 ->

[
[{Name: "A", Value: 154}, {Name: "B", Value: 190}, {Name: "C", Value: 179}, {Name: "D", Value: 67}],
[{Name: "A", Value: 64}, {Name: "B", Value: 90}, {Name: "C", Value: 52}, {Name: "D", Value: 98}]
[{Name: "A", Value: 100}, {Name: "B", Value: 60}, {Name: "C", Value: 170}, {Name: "D", Value: 120}]
]

我如何在 Golang 中对这些 map 数组进行排序。请帮忙!

最佳答案

您的数据看起来很容易表示为 map[string]int 类型的 map slice 。由于您没有在问题中提供任何 Go 代码,我无法确定数据类型,因此我假设它是此答案中 map[string]int 类型的 map 片段。

对 map slice 进行排序的一种简单方法是使用 the sort.Slice function .来自 a comment in the first examplesort 包文档中:

use sort.Slice with a custom Less function, which can be provided as a closure. In this case no methods are needed

Less函数需要满足签名

func(i, j int) bool

根据 package documentation (at Interface) :

Less reports whether the element with index i should sort before the element with index j.

使用闭包允许您在函数体中引用您的数据结构,即使它不是参数列表的一部分。

这是一个可运行的示例,它对与您问题中的数据匹配的 map[string]int 值 slice 进行排序:

package main

import(
"fmt"
"sort"
)

func main() {
in := []map[string]int{
{
"A": 100,
"B": 60,
"C": 170,
"D": 120,
},
{
"A": 64,
"B": 90,
"C": 52,
"D": 98,
},
{
"A": 154,
"B": 190,
"C": 179,
"D": 67,
},
}
for k, _ := range in[0] {
sort.Slice(in, func(i, j int) bool { return in[i][k] < in[j][k] })
fmt.Printf("By %s: %v\n", k, in)
}
}

输出:

By A: [map[A:64 B:90 C:52 D:98] map[A:100 B:60 C:170 D:120] map[A:154 B:190 C:179 D:67]]
By B: [map[A:100 B:60 C:170 D:120] map[B:90 C:52 D:98 A:64] map[C:179 D:67 A:154 B:190]]
By C: [map[A:64 B:90 C:52 D:98] map[A:100 B:60 C:170 D:120] map[A:154 B:190 C:179 D:67]]
By D: [map[A:154 B:190 C:179 D:67] map[B:90 C:52 D:98 A:64] map[A:100 B:60 C:170 D:120]]

关于arrays - 使用与值匹配的键对映射数组进行排序 GO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092273/

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