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

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

按行長和字母順序對字符串數組進行排序

按行長和字母順序對字符串數組進行排序

Go
慕神8447489 2022-10-10 19:14:02
我無法在 Golang 中弄清楚:/ 假設我有這個列表:2 22 2H 2J 2J2 2J3 2J322422 2J322423 2J33 2M 2P 2W 2X我希望排序后的輸出為:2 22 2H 2J 2M 2P 2W 2X 2J2 2J3 2J33 2J322422 2J322423我在 Golang 中嘗試了一些東西,但無法讓它工作。// Logt.Log.Println(values)// Sort values alphabeticallysort.Strings(values)// Sort values by lengthsort.Slice(values, func(i, j int) bool {    return len(values[i]) < len(values[j])})// Logt.Log.Println(values)
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

如果你排序兩次,第二次排序不會考慮第一次排序的規則。


您必須排序一次,并且排序規則必須包含您要排序的所有屬性。


所以主要你想按長度排序。如果 2 個元素具有相同的長度,則按自然順序。您可以通過首先檢查less()函數中的長度來實現這一點。如果它們不相等,則按長度排序決定結果。如果他們是平等的,你訴諸自然秩序。


list := strings.Split("2 22 2H 2J 2J2 2J3 2J322422 2J322423 2J33 2M 2P 2W 2X", " ")

fmt.Println(list)


sort.Slice(list, func(i, j int) bool {

    l1, l2 := len(list[i]), len(list[j])

    if l1 != l2 {

        return l1 < l2

    }

    return list[i] < list[j]

})

fmt.Println(list)

這將輸出(在Go Playground上嘗試):


[2 22 2H 2J 2J2 2J3 2J322422 2J322423 2J33 2M 2P 2W 2X]

[2 22 2H 2J 2M 2P 2W 2X 2J2 2J3 2J33 2J322422 2J322423]

您可以擴展此邏輯以按任意數量的屬性(或規則)進行排序。您首先檢查優先級較高的規則,如果它們定義了順序差異,則返回它們指定的順序(i第 th元素是否小于jth的信息)。如果它們不區分相關元素的位置,則繼續使用較低優先級的規則。


查看完整回答
反對 回復 2022-10-10
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

您需要一個比較器函數,該函數可以根據您定義的排序規則進行正確比較。


要對一段字符串進行排序,首先按長度,然后按字母順序,您應該這樣做:


strs := []string{

  "Zulu"    , "Yankee" , "X-Ray"  , "Whiskey" , "Victor" ,

  "Ulysses" , "Tango"  , "Sierra" , "Romeo"   , "Quebec" ,

  "Poppa"   ,"Oscar"   , "Nancy"  , "Mike"    , "Lima"   ,

  "Kilo"    , "Juliet" , "India"  , "Hotel"   , "Golf"   ,

  "Foxtrot" , "Echo"   , "Delta"  , "Charlie" , "Bravo"  ,

  "Alpha"   ,

  }


  byLengthThenAlphabetically := func(i int, j int) bool {

    x := strs[i]

    y := strs[j]

    deltaLength := len(x) - len(y)


    return deltaLength < 0 || (deltaLength == 0 && x < y)

  }

  

  sort.Slice(strs, byLengthThenAlphabetically )


在https://play.golang.org/p/nL2bTDlWM49的 Go Playground 中嘗試一下


查看完整回答
反對 回復 2022-10-10
  • 2 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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