Arrays 使用与值GO匹配的键对映射数组进行排序
我刚开始在Golang编程,想对一系列地图进行排序。我有一系列地图。让我们称之为示例_数组Arrays 使用与值GO匹配的键对映射数组进行排序,arrays,sorting,go,maps,Arrays,Sorting,Go,Maps,我刚开始在Golang编程,想对一系列地图进行排序。我有一系列地图。让我们称之为示例_数组 example_array = [ [ { Name: "A", Value: 100 }, { Name: "B", Value: 60 }, { Name: "C", Value: 170 }, { Name: "D", Value: 120} ], [ { Name: "A", Value: 64 }, { Name: "B",
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 }
]
]
现在我想使用key“C”
的值对这个数组进行排序,因此示例数组应该修改为->
[
[{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}]
]
[
[{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}]
]
如果我使用key“D”
的值对原始数组进行排序,则原始数组应修改为->
[
[{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}]
]
[
[{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[string]int
的映射片。由于您的问题中没有提供任何Go代码,因此我无法确定数据类型,因此我将假定在本回答中它是类型为map[string]int
的一个映射片
对地图切片进行排序的一种简单方法是使用。从<代码>分类代码>程序包文档中:
使用带有自定义Less函数的sort.Slice
,该函数可以作为闭包提供。在这种情况下,不需要任何方法
满足签名要求的函数越少
func(i, j int) bool
Per:
Less报告索引为i
的元素是否应在索引为j
的元素之前排序
使用闭包可以引用函数体中的数据结构,即使它不是参数列表的一部分
下面是一个可运行的示例,它对与问题中的数据相匹配的map[string]int
值片段进行排序:
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)
}
}
您的数据看起来可以很容易地表示为类型为
map[string]int
的映射片。由于您的问题中没有提供任何Go代码,因此我无法确定数据类型,因此我将假定在本回答中它是类型为map[string]int
的一个映射片
对地图切片进行排序的一种简单方法是使用。从<代码>分类代码>程序包文档中:
使用带有自定义Less函数的sort.Slice
,该函数可以作为闭包提供。在这种情况下,不需要任何方法
满足签名要求的函数越少
func(i, j int) bool
Per:
Less报告索引为i
的元素是否应在索引为j
的元素之前排序
使用闭包可以引用函数体中的数据结构,即使它不是参数列表的一部分
下面是一个可运行的示例,它对与问题中的数据相匹配的map[string]int
值片段进行排序:
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)
}
}
学习使用软件包。除了软件包文档外,还有很多示例和解释供您在线阅读。@jrefor我已经检查了排序软件包,但找不到合适的解决方案。请帮忙!那你可能还不明白排序的威力。排序还没有。例如,您是否了解软件包文档中的内容?或者您可能并没有真正尝试对地图数组进行排序。代码摘录的结构对于数据结构来说并不完全清楚。如果您想对一组地图进行排序,您可以发布一段时间来改进您的问题,您描述的操作看起来更像是对一组地图进行排序。这些数组是在一个数组中,还是在其他数组中?学习使用该软件包。除了软件包文档外,还有很多示例和解释供您在线阅读。@jrefor我已经检查了排序软件包,但找不到合适的解决方案。请帮忙!那你可能还不明白排序的威力。排序还没有。例如,您是否了解软件包文档中的内容?或者您可能并没有真正尝试对地图数组进行排序。代码摘录的结构对于数据结构来说并不完全清楚。如果您想对一组地图进行排序,您可以发布一段时间来改进您的问题,您描述的操作看起来更像是对一组地图进行排序。这些数组是在一个数组中,还是在其他数组中?