{"id":4137,"date":"2018-10-26T00:39:09","date_gmt":"2018-10-25T16:39:09","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=4137"},"modified":"2018-10-26T00:39:09","modified_gmt":"2018-10-25T16:39:09","slug":"go%e8%af%ad%e8%a8%80%e5%ad%a6%e4%b9%a06-%e5%a6%82%e4%bd%95%e8%bf%9b%e8%a1%8csort%e6%8e%92%e5%ba%8f","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/4137.html","title":{"rendered":"Go\u8bed\u8a00\u5b66\u4e60#6-\u5982\u4f55\u8fdb\u884csort\u6392\u5e8f"},"content":{"rendered":"<p>=Start=<\/p>\n<h4 id=\"id-\u6a21\u677f-\u7f18\u7531\uff1a\">\u7f18\u7531\uff1a<\/h4>\n<p>\u5728\u7528Python\u548cShell\u8fdb\u884c\u65e5\u5fd7\u5206\u6790\u7684\u65f6\u5019\uff0c\u5f88\u5e38\u89c1\u7684\u4e00\u4e2a\u9700\u6c42\u5c31\u662f\u2014\u2014\u5148\u628a\u67d0\u4e2a\u5b57\u6bb5\u4f5c\u4e3akey\u8fdb\u884c\u53bb\u91cd\/\u8ba1\u6570\u7edf\u8ba1\uff0c\u7136\u540e\u6309\u6b21\u6570\u6216\u662f\u5185\u5bb9\u8fdb\u884c\u6392\u5e8f\u7edf\u8ba1\u3002\u521a\u597d\u6700\u8fd1\u5728\u5b66\u4e60Go\u8bed\u8a00\uff0c\u6240\u4ee5\u60f3\u7740\u770b\u80fd\u4e0d\u80fd\u5b66\u4e60\u4e00\u4e0b\u5982\u4f55\u7528Go\u8bed\u8a00\u8fdb\u884c\u5b9e\u73b0\uff0c\u65b9\u4fbf\u4ee5\u540e\u5feb\u901f\u53c2\u8003\u6539\u5199\u3002<\/p>\n<h4 id=\"id-\u6a21\u677f-\u6b63\u6587\uff1a\">\u6b63\u6587\uff1a<\/h4>\n<h5 id=\"id-\u6a21\u677f-\u53c2\u8003\u89e3\u7b54\uff1a\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n<h6>\/\/ \u9488\u5bf9\u300c\u6574\u6570\u300d\u5207\u7247\u7684\u6392\u5e8f<\/h6>\n<pre class=\"lang:default decode:true\">func Ints(a []int) \/\/ \u9488\u5bf9\u6574\u578b\u5207\u7247 a \u8fdb\u884c\u5c31\u5730\u6392\u5e8f\uff08\u5347\u5e8f\uff09\r\n\r\ns := []int{5, 2, 6, 3, 1, 4} \/\/ unsorted\r\nsort.Ints(s)\r\nfmt.Println(s) \/\/ [1 2 3 4 5 6]\r\n<\/pre>\n<h6>\/\/ \u9488\u5bf9\u300c\u5b57\u7b26\u4e32\u300d\u5207\u7247\u7684\u6392\u5e8f<\/h6>\n<pre class=\"lang:default decode:true\">func Strings(a []string) \/\/ \u9488\u5bf9\u5b57\u7b26\u4e32\u5207\u7247 a \u8fdb\u884c\u5c31\u5730\u6392\u5e8f\uff08\u5347\u5e8f\uff09\r\n\r\ns := []string{\"5\", \"2\", \"6\", \"3\", \"1\", \"4\"} \/\/ unsorted\r\nsort.Strings(s)\r\nfmt.Println(s) \/\/ [1 2 3 4 5 6]\r\n<\/pre>\n<h6>\/\/ \u9488\u5bf9\u300c\u6d6e\u70b9\u578b\u300d\u5207\u7247\u7684\u6392\u5e8f<\/h6>\n<pre class=\"lang:default decode:true \">func Float64s(a []float64)\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h6><span style=\"color: #ff0000;\">\/\/ \u300c\u964d\u5e8f\/\u9006\u5e8f\u300d\u8be5\u5982\u4f55\u5b9e\u73b0\uff1f<\/span><\/h6>\n<pre class=\"lang:default decode:true\">func Reverse(data Interface) Interface \/\/ \u5bf9 data \u8fdb\u884c\u9006\u5e8f\u540e\u8fd4\u56de\r\n\r\ns := []int{5, 2, 6, 3, 1, 4} \/\/ unsorted\r\nsort.Sort(sort.Reverse(sort.IntSlice(s))) \/\/ \u5148\u7528 sort.IntSlice \u8fdb\u884c\u7c7b\u578b\u8f6c\u6362\uff0c\u7136\u540e\u8c03\u7528\u7c7b\u578b IntSlice \u4e0b\u7684 Reverse \u65b9\u6cd5\u8fdb\u884c\u9006\u5e8f\uff0c\u7136\u540e\u518d Sort \u4e00\u4e0b\uff08\u5176\u4ed6\u7c7b\u578b\u7684\u4e5f\u9700\u8981\u5148\u8f6c\u6362\u6210\u5b9e\u73b0\u4e86sort\u65b9\u6cd5\u7684\u5bf9\u5e94\u7c7b\u578b\u624d\u884c\uff09\r\n\r\nfmt.Println(s) \/\/ [6 5 4 3 2 1]\r\n<\/pre>\n<h6>\/\/ \u6839\u636e keys \u5bf9 map \u8fdb\u884c\u6392\u5e8f<\/h6>\n<ul>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/23330781\/sort-go-map-values-by-keys\">Sort Go map values by keys<\/a><\/li>\n<\/ul>\n<p>\u5148\u5efa\u7acb\u4e00\u4e2a slice \u7528\u4e8e\u5b58\u653e\u5355\u7eaf\u9488\u5bf9 keys \u7684\u6392\u5e8f\u7ed3\u679c\uff0c\u7136\u540e\u5728\u6253\u5370\u6216\u4f7f\u7528\u7684\u65f6\u5019\u501f\u52a9\u8fd9\u4e2a<span style=\"color: #ff0000;\"><strong>\u989d\u5916\u7684 slice<\/strong><\/span>\u6765\u8fdb\u884c\u5347\u5e8f\u6216\u964d\u5e8f\u6392\u5217\u3002<\/p>\n<pre class=\"lang:default decode:true\">package main\r\n\r\nimport (\r\n    \"fmt\"\r\n    \"sort\"\r\n)\r\n\r\nfunc main() {\r\n    \/\/ To create a map as input\r\n    m := make(map[int]string)\r\n    m[1] = \"a\"\r\n    m[2] = \"c\"\r\n    m[0] = \"b\"\r\n\r\n    \/\/ To store the keys in slice in sorted order\r\n    var keys []int\r\n    for k := range m {\r\n        keys = append(keys, k)\r\n    }\r\n    sort.Ints(keys)\r\n\r\n    \/\/ To perform the opertion you want\r\n    for _, k := range keys {\r\n        fmt.Println(\"Key:\", k, \"Value:\", m[k])\r\n    }\r\n}<\/pre>\n<h6><span style=\"color: #ff0000;\">\/\/ \u6839\u636e values \u5bf9 map \u8fdb\u884c\u6392\u5e8f<\/span><\/h6>\n<p><span style=\"color: #ff0000;\">\/\/ \u8981\u5bf9Go \u8bed\u8a00\u7684map\u6309\u7167value\u8fdb\u884c\u6392\u5e8f\uff0c\u601d\u8def\u662f\u76f4\u63a5\u4e0d\u7528map\uff0c\u7528struct\u5b58\u653ekey\u548cvalue\uff0c<strong>\u5b9e\u73b0\u5bf9\u5e94\u7c7b\u578b\u7684sort\u63a5\u53e3<\/strong>\uff08\u9700\u5b9e\u73b0Swap\/Len\/Less\u8fd93\u4e2a\u65b9\u6cd5\uff09\uff0c\u7136\u540e\u5c31\u53ef\u4ee5\u8c03\u7528sort.Sort\u8fdb\u884c\u6392\u5e8f\u4e86\u3002<\/span><\/p>\n<p>\/* \u6839\u636e value \u8fdb\u884c\u6392\u5e8f *\/<br \/>\nhttp:\/\/localhost:8080\/pkg\/sort\/#example_<\/p>\n<p><span style=\"color: #ff0000;\">\/* \u6839\u636e\u591a\u4e2a value \u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a\u8fdb\u884c\u6392\u5e8f *\/<\/span><br \/>\nhttp:\/\/localhost:8080\/pkg\/sort\/#example__sortKeys<\/p>\n<p><span style=\"color: #ff0000;\">\/* \u6839\u636e\u591a\u4e2a value \u7684\u7ec4\u5408\u8fdb\u884c\u6392\u5e8f *\/<\/span><br \/>\nhttp:\/\/localhost:8080\/pkg\/sort\/#example__sortMultiKeys<\/p>\n<pre class=\"lang:default decode:true \">package main\r\n\r\nimport (\r\n    \"fmt\"\r\n    \"sort\"\r\n)\r\n\r\ntype Person struct {\r\n    Name string\r\n    Age  int\r\n}\r\n\r\n\/\/ \u8ba9\u6253\u5370\u7684\u65f6\u5019\u770b\u8d77\u6765\u4f1a\u66f4\u597d\r\nfunc (p Person) String() string {\r\n    return fmt.Sprintf(\"%s:%d\", p.Name, p.Age)\r\n}\r\n\r\n\/\/ ByAge implements sort.Interface for []Person based on\r\n\/\/ the Age field.\r\ntype ByAge []Person\r\n\r\nfunc (a ByAge) Len() int           { return len(a) }\r\nfunc (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\r\nfunc (a ByAge) Less(i, j int) bool { return a[i].Age &lt; a[j].Age }\r\n\r\ntype ByName []Person\r\n\r\nfunc (a ByName) Len() int           { return len(a) }\r\nfunc (a ByName) Less(i, j int) bool { return a[i].Name &lt; a[j].Name }\r\nfunc (a ByName) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\r\n\r\nfunc main() {\r\n    people := []Person{\r\n        {\"Bob\", 31},\r\n        {\"John\", 42},\r\n        {\"Michael\", 17},\r\n        {\"Jenny\", 26},\r\n    }\r\n    fmt.Println(people) \/\/ [Bob: 31 John: 42 Michael: 17 Jenny: 26]\r\n\r\n    fmt.Println(ByAge(people)) \/\/ [Bob: 31 John: 42 Michael: 17 Jenny: 26]\r\n    sort.Sort(ByAge(people))\r\n    fmt.Println(people) \/\/ [Michael: 17 Jenny: 26 Bob: 31 John: 42]\r\n\r\n    \/\/ To create a map as input\r\n    m := make(map[int]string)\r\n    m[1] = \"a\"\r\n    m[2] = \"c\"\r\n    m[0] = \"b\"\r\n    fmt.Println()\r\n    fmt.Printf(\"Original: %v\\n\", m)\r\n\r\n    p := make([]Person, len(m))\r\n    i := 0\r\n    for k, v := range m {\r\n        \/\/ fmt.Printf(\"k: %d, v: %s\\n\", k, v)\r\n        p[i] = Person{v, k}\r\n        i++\r\n    }\r\n    fmt.Printf(\"Original(v:k): %v\\n\", p)\r\n    fmt.Println()\r\n    \/\/ sort.Sort([]Person(p)) \/\/ cannot use ([]Person)(p) (type []Person) as type sort.Interface in argument to sort.Sort: []Person does not implement sort.Interface (missing Len method)\r\n    sort.Sort(ByAge(p)) \/\/ sort.Sort() \u4e2d\u7684\u53c2\u6570\u5fc5\u987b\u8981\u5b9e\u73b0\u76f8\u5173\u7684\u63a5\u53e3\uff0c\u6240\u4ee5\u9700\u8981\u7528\u5b9e\u73b0\u4e86\u63a5\u53e3\u7684\u7c7b\u578b\u8fdb\u884c\u8f6c\u6362\r\n    fmt.Printf(\"Sorted(by value): %v\\n\", p)\r\n\r\n    sort.Sort(ByName(p)) \/\/ sort.Sort() \u4e2d\u7684\u53c2\u6570\u5fc5\u987b\u8981\u5b9e\u73b0\u76f8\u5173\u7684\u63a5\u53e3\uff0c\u6240\u4ee5\u9700\u8981\u7528\u5b9e\u73b0\u4e86\u63a5\u53e3\u7684\u7c7b\u578b\u8fdb\u884c\u8f6c\u6362\r\n    fmt.Printf(\"Sorted(by key): %v\\n\", p)\r\n\r\n    \/\/ \/\/ To store the keys in slice in sorted order\r\n    \/\/ var keys []int\r\n    \/\/ for k := range m {\r\n    \/\/     keys = append(keys, k)\r\n    \/\/ }\r\n    \/\/ sort.Ints(keys)\r\n\r\n    \/\/ \/\/ To perform the opertion you want\r\n    \/\/ for _, k := range keys {\r\n    \/\/     fmt.Println(\"Key:\", k, \"Value:\", m[k])\r\n    \/\/ }\r\n\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h5 id=\"id-\u6a21\u677f-\u53c2\u8003\u94fe\u63a5\uff1a\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<ul>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/23330781\/sort-go-map-values-by-keys\">Sort Go map values by keys<\/a><\/li>\n<li><a href=\"https:\/\/www.jianshu.com\/p\/01adb0e2a69f\">map\u6309key\u548c\u6309value\u6392\u5e8f<\/a><\/li>\n<li><a href=\"https:\/\/golang.org\/pkg\/sort\/#example_\">https:\/\/golang.org\/pkg\/sort\/#example_<\/a><\/li>\n<\/ul>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u5728\u7528Python\u548cShell\u8fdb\u884c\u65e5\u5fd7\u5206\u6790\u7684\u65f6\u5019\uff0c\u5f88\u5e38\u89c1\u7684\u4e00\u4e2a\u9700\u6c42\u5c31\u662f\u2014\u2014\u5148\u628a\u67d0\u4e2a\u5b57\u6bb5\u4f5c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,7],"tags":[564,292],"class_list":["post-4137","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-programing","tag-golang","tag-sort"],"views":3178,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/4137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=4137"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/4137\/revisions"}],"predecessor-version":[{"id":4138,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/4137\/revisions\/4138"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=4137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=4137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=4137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}