gpt4 book ai didi

Swift:Java 相当于 [UInt8] 的 Arrays.copyOfRange

转载 作者:行者123 更新时间:2023-11-28 11:43:00 25 4
gpt4 key购买 nike

我正在将 java 代码翻译成 swift,我想知道 Arrays.copyOfRange 的 swift 等价物是什么:

public static byte[] copyOfRange(byte[] original, int from, int to) 

对于我的示例,我想翻译下一行:

Arrays.copyOfRange(packet.value(), 2, packet.length())

谢谢

最佳答案

如果上限值大于数组长度,Java 的 copyOfRange 也会用零填充结果数组。此函数也可以处理这种情况。

这个函数可以做成通用的。它适用于符合 ExpressibleByIntegerLiteral 的任何类型,这是 0 填充所需的。

func copyOfRange<T>(arr: [T], from: Int, to: Int) -> [T]? where T: ExpressibleByIntegerLiteral {
guard from >= 0 && from <= arr.count && from <= to else { return nil }

var to = to
var padding = 0

if to > arr.count {
padding = to - arr.count
to = arr.count
}

return Array(arr[from..<to]) + [T](repeating: 0, count: padding)
}

示例:

let arr: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

if let result = copyOfRange(arr: arr, from: 0, to: 3) {
print(result) // [0, 1, 2]
}
if let result = copyOfRange(arr: arr, from: 7, to: 12) {
print(result) // [7, 8, 9, 0, 0]
}

关于Swift:Java 相当于 [UInt8] 的 Arrays.copyOfRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53261757/

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