第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

按指定字段對結(jié)構(gòu)切片進(jìn)行排序

按指定字段對結(jié)構(gòu)切片進(jìn)行排序

Go
叮當(dāng)貓咪 2023-05-04 16:42:48
假設(shè)我有一個(gè)SortableStruct包含 3 個(gè)字段的結(jié)構(gòu)A B C,我想實(shí)現(xiàn)使用的函數(shù)sl []SortableStruct,orderFied string其中orderField一個(gè)是結(jié)構(gòu)的字段。此函數(shù)應(yīng)重新運(yùn)行按 排序的切片orderField。有沒有辦法在沒有巨大開關(guān)盒的情況下做到這一點(diǎn)。sort.Interface當(dāng)我想按不同字段比較結(jié)構(gòu)時(shí),如何實(shí)現(xiàn)對我來說并不難。
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

嗯,最簡單的方法是切換field類型并分配一個(gè) SORT 函數(shù)。這是您的代碼:


package main


import (

    "fmt"

    "sort"

)


type SortableStruct struct {

    A int

    B int

    C int

}


func sortStruct(arr []SortableStruct, field string) {

    var less func(i, j int) bool

    switch field {

    case "B":

        less = func(i, j int) bool {

            return arr[i].B < arr[j].B

        }

    case "C":

        less = func(i, j int) bool {

            return arr[i].C < arr[j].C

        }

    default:

        less = func(i, j int) bool {

            return arr[i].A < arr[j].A

        }

    }


    sort.Slice(arr, less)

}


func main() {

    arr := []SortableStruct{

        {

            A: 1,

            B: 5,

            C: 3,

        },

        {

            A: 2,

            B: 3,

            C: 20,

        },

        {

            A: -1,

            B: -1,

            C: 10,

        },

    }


    sortStruct(arr, "C")

    fmt.Println(arr)

}

另一個(gè)想法是定義 3 個(gè)類型,每個(gè)類型都實(shí)現(xiàn)接口sort.Interface


type SortableStructByA []SortableStruct

type SortableStructByB []SortableStruct

type SortableStructByC []SortableStruct

然后,您必須將切片轉(zhuǎn)換為所需的類型(取決于您想要的類型)并執(zhí)行如下操作:


sortableSlice := SortableStructByA(arr)

sort.Sort(sortableSlice)


查看完整回答
反對 回復(fù) 2023-05-04
  • 1 回答
  • 0 關(guān)注
  • 134 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號