English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Analisi del metodo di ordinamento degli array secondo regole specifiche in Golang

Questo esempio spiega il metodo di ordinamento dell'array secondo una regola specifica in Golang. Condivido questo con tutti voi per riferimento, come segue:

Date un array bidimensionale, ordinare questo array bidimensionale per la colonna i (i inizia da 1), se la colonna i è identica, ordinare le righe identiche per l'elemento della colonna i+1,

Se gli elementi della colonna i+1 sono anche identici, continua a confrontare la colonna i+2, e così via, fino all'ultima colonna. Se le colonne da i all'ultima colonna sono identiche, vengono riordinati secondo l'ordine originale.

Input di esempio:

1,2,3
2,3,4
2,3,1
1,3,1

Ordina per la seconda colonna, output:

1,2,3
2,3,1
1,3,1
2,3,4

Implementazione del codice:

package huawei
import (
    "fmt"
    "sort"
)
func Test09Base() {
    nums := [][]int{{1, 2, 3}, {2, 3, 4}, {2, 3, 1}, {1, 3, 1}}
    firstIndex := 2 //按第二列排序
    result := arraySort(nums, firstIndex-1)
    fmt.Println(result)
}
//按指定规则对nums进行排序(注:此firstIndex从0开始)
func arraySort(nums [][]int, firstIndex int) [][]int {
    //检查
    if len(nums) <= 1 {
        return nums
    }
    if firstIndex < 0 || firstIndex > len(nums[0])-1 {
        fmt.Println("Warning: Param firstIndex should between 0 and len(nums)-1. The original array is returned.")
        return nums
    }
    //排序
    mIntArray := &IntArray{nums, firstIndex}
    sort.Sort(mIntArray)
    return mIntArray.mArr
}
type IntArray struct {
    mArr[][]int
    firstIndex int
}
// Implementazione di IntArray dell'interfaccia sort.Interface
func (arr *IntArray) Len() int {
    return len(arr.mArr)
}
func (arr *IntArray) Swap(i, j int) {
    arr.mArr[i], arr.mArr[j] = arr.mArr[j], arr.mArr[i]
}
func (arr *IntArray) Less(i, j int) bool {
    arr1 := arr.mArr[i]
    arr2 := arr.mArr[j]
    for index := arr.firstIndex; index < len(arr1); index++ {
        if arr1[index] < arr2[index] {
            return true
        } else if arr1[index] > arr2[index] {
            return false
        }
    }
    return i < j
}

Spero che questo articolo possa essere utile a tutti per la progettazione di programmi Go.

Dichiarazione: il contenuto di questo articolo è stato preso da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, il sito web non possiede il diritto di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito Web rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare