gpt4 book ai didi

arrays - 在附加到 slice 时排序?

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

我有一个 []byte,我需要按升序对其进行排序。

我得到一个包含项目的对象,然后迭代数组以创建返回的对象:

// unfortunately, for some obscure reason I can't change the data types of the caller and the object from the function call are different, although both are []byte underneath (...)

type ID []byte
// in another package:
type ByteInterface []byte


func (c *Store) GetAll() ByteInterface {
returnObj := make([]ByteInterface,0)
obj, err := GetData()
// err handling
for _, b := range obj.IDs {
returnObj = append(returnObj, ByteInterface(b))
}
return returnObj
}

所以我问自己是否可以执行 append 以便立即对 returnObj 进行排序,或者我是否需要对 obj 进行排序。 ByteData 预先(或排序 returnOjb 之后)。

最佳答案

在每次迭代中,执行以下操作:

  1. 增加目标 slice (可能重新分配它):

    numElems := len(returnObj)
    returnObj = append(returnObj, make([]byte, len(obj))...)
  2. 使用标准的插入方法通过从源 slice 中找到一个位置来放置每个字节来保持目标排序:

    for _, b := range obj {
    i := sort.Search(numElems, func (i int) bool {
    return returnObj[i] >= b
    }
    if i < numElems {
    copy(returnObj[i+1:], returnObj[i:])
    }
    returnObj[i] = b
    numElems++
    }

    (对 copy 的调用应该通过减少复制来优化,但这留给读者作为练习。)

关于arrays - 在附加到 slice 时排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519969/

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