Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用与值GO匹配的键对映射数组进行排序_Arrays_Sorting_Go_Maps - Fatal编程技术网

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

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",

我刚开始在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", 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我已经检查了排序软件包,但找不到合适的解决方案。请帮忙!那你可能还不明白排序的威力。排序还没有。例如,您是否了解软件包文档中的内容?或者您可能并没有真正尝试对地图数组进行排序。代码摘录的结构对于数据结构来说并不完全清楚。如果您想对一组地图进行排序,您可以发布一段时间来改进您的问题,您描述的操作看起来更像是对一组地图进行排序。这些数组是在一个数组中,还是在其他数组中?