登录
首页 >  Golang >  Go问答

对切​​片索引进行排序

来源:stackoverflow

时间:2024-04-15 15:54:34 384浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《对切​​片索引进行排序》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我想对元素的索引进行排序,而不是对切片进行排序。对于 []string{"dog","cat","apple","bat"} 我想得到 []int{2,3,1,0}

package main

import (
    "fmt"
    "sort"
    "strings"
)

func main() {
    arr := []string{"dog","cat","apple","bat"}
    n := len(arr)
    indices := make([]int, n)
    for i:=0;i

正确答案


less() 函数获取的索引是可排序切片 (indices) 的索引,而不是另一个 (arr) 切片的索引。

因此使用ij来索引indices。当然,结果是用于 arr 切片的索引(这是您对 indices 切片的定义),因此您可以使用表达式 arr[indices[i]arr[indices[j]] 获得可比较的元素。

并且不要使用 strings.Compare(),只需使用 less < 运算符来比较字符串。详情请参见Go compare strings

sort.slice(indices, func(i, j int) bool {
    return arr[indices[i]] < arr[indices[j]]
})

通过此更改,您将获得预期的输出(在 Go Playground 上尝试):

[dog cat apple bat] [2 3 1 0]
[apple bat cat dog]

理论要掌握,实操不能落!以上关于《对切​​片索引进行排序》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>