代码之家  ›  专栏  ›  技术社区  ›  lyfeng

按go中的v[i]/w[i]对i的数组进行排序

  •  0
  • lyfeng  · 技术社区  · 8 年前

    我希望按以下顺序对索引数组进行排序 v[i]/w[i] 哪里 v 和 w 是另外两个整数数组。以下是我在Go中的尝试:

    package main
    import "fmt"
    import "sort"
    
    func main() {
        v := [3]int{5, 6, 3}
        w := [3]int{4, 5, 2}
        indices := make([]int, 3)
        for i := range indices {
            indices[i] = i
        }
        sort.Slice(indices, func(a, b int) bool {
            return float32(v[a])/float32(w[a]) > float32(v[b])/float32(w[b])
        })
        fmt.Println(indices)
    }
    

    我预计产量 [2,0,1] 因为 3/2>5/4>6/5 但实际产量是 [0,2,1] . 有人能帮我找出问题所在吗?谢谢您。

    3 回复  |  直到 8 年前
        1
  •  2
  •   Uvelichitel    8 年前

    sort.Slice(indices, func(a, b int) bool {
            return float32(v[indices[a]])/float32(w[indices[a]]) > float32(v[indices[b]])/float32(w[indices[b]])
        })
    

    Playground

        2
  •  1
  •   JimB    8 年前

    w v indices

    sort.Slice(indices, func(i, j int) bool {
        return float64(v[indices[i]])/float64(w[indices[i]]) > float64(v[indices[j]])/float64(w[indices[j]])
    })
    

    https://play.golang.org/p/6oFBM27bVR-

    type indexSorter struct {
        indices, w, v []int
    }
    
    func (a indexSorter) Len() int { return len(a.indices) }
    func (a indexSorter) Swap(i, j int) {
        a.indices[i], a.indices[j] = a.indices[j], a.indices[i]
        a.w[i], a.w[j] = a.w[j], a.w[i]
        a.v[i], a.v[j] = a.v[j], a.v[i]
    }
    func (a indexSorter) Less(i, j int) bool {
        return float64(a.v[i])/float64(a.w[i]) > float64(a.v[i])/float64(a.w[j])
    }
    

    https://play.golang.org/p/EFUkHWgjo5U

        3
  •  0
  •   hbejgel    8 年前