亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對結構 Golang 的二維數組進行排序

對結構 Golang 的二維數組進行排序

Go
倚天杖 2022-12-13 16:02:36
我想為結構的 2D 切片創建一致的順序,我正在從地圖創建 2D 切片,因此順序總是不同的。我的結構看起來像// Hit contains the data for a hit.type Hit struct {    Key  string  `json:"key"`    Data []Field `json:"data"`}// Hits stores a list of hits.type Hits [][]Hit我想為我的類型內容提供一致的順序Hits。我努力了:func (c Hits) Len() int { return len(c) }func (c Hits) Swap(i, j int) { c[i], c[j] = c[j], c[i] }func (c Hits) Less(i, j int) bool { return strings.Compare(c[i][0].Key, c[j][0].Key) == -1 }但結果似乎仍然以隨機順序返回。我正在考慮可能對切片中的每個項目進行哈希處理,但認為可能有一個更簡單的選擇
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

a 上的迭代順序map,因為它是一個哈希表,所以它是相當不確定的(實際上,它不是 - 將具有相同鍵的項目以完全相同的順序插入到 2 個映射中,每個映射的迭代順序將是相同的)。

假設您的地圖是一個map[string]Hit,為了以確定的順序對其進行迭代,我將枚舉地圖中的鍵集,對其進行排序,然后使用該排序集來枚舉地圖。

是這樣的

package main


import (

  "fmt"

  "sort"

)


type Hit struct {

  Key  string  `json:"key"`

  Data []Field `json:"data"`

}


type Field struct {

  Value string `json:"value"`

}


func main() {

  var mapOfHits = getSomeHits()

  var sortedHits = sortHits(mapOfHits)

  

  for _, h := range sortedHits {

    fmt.Println(h.Key)

  }


}


func getSomeHits() map[string]Hit {

  return make(map[string]Hit, 0)

}


func sortHits(m map[string]Hit) []Hit {

  keys := make([]string, 0, len(m))

  sorted := make([]Hit, 0, len(m))

  

  for k := range m {

    keys = append(keys, k)

  }


  sort.Strings(keys)


  for _, k := range keys {

    sorted = append(sorted, m[k])

  }


  return sorted

}


查看完整回答
反對 回復 2022-12-13
  • 1 回答
  • 0 關注
  • 265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號