gpt4 book ai didi

sorting - 转换排序类型 : any runtime cost?

转载 作者:IT王子 更新时间:2023-10-29 01:39:30 25 4
gpt4 key购买 nike

我刚刚开始掌握 Go(两天前开始,写了不到 1000 行),我还在想一些习语。

我需要按长度降序对一段字符串进行排序。我确实喜欢这样:

func ... {
... do business ...

sort.Sort(stringsLongestFirst(severalThousandStrings))

... carry on and be happy, because it works ...
}

type stringsLongestFirst []string

func (b stringsLongestFirst) Len() int { return len(b) }
func (b stringsLongestFirst) Less(i, j int) bool { return len(b[i]) > len(b[j]) }
func (b stringsLongestFirst) Swap(i, j int) { b[j], b[i] = b[i], b[j] }

首先我想知道这是否是最惯用的方法。

然后,最重要的是,我想知道当我编写 stringsLongestFirst(severalThousandStrings) 时,幕后会发生什么。字符串 slice 是否以某种方式巧妙地重新解释为 stringsLongestFirst 类型,或者我是否必须计算一些复制开销?

(已编辑:从规范中删除了不适合当前情况的摘录)

最佳答案

您正在转换的类型既不是数字类型也不是字符串:[]stringstringsLongestFirst 是 slice 类型。

因此,转换不会产生比复制 slice header (12 或 24 字节,具体取决于字的大小)更多的开销,这在将其打包为接口(interface){}时无论如何都会发生变量以便调用 Sort。支持数组未被复制,这就是为什么 severalThousandStrings 在调用后显示为已排序的原因。

关于sorting - 转换排序类型 : any runtime cost?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31776584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com