Go中的Java Arrays.copyOfRange的等价物是什么?
我正在致力于创建一个Java库来处理数组的管理。Go中是否有Arrays.copyOfRange的等效项?简单的一行代码是(省略索引检查): 一个简单的“几乎”就可以完成这项工作,但是由于Java的Go中的Java Arrays.copyOfRange的等价物是什么?,java,arrays,go,Java,Arrays,Go,我正在致力于创建一个Java库来处理数组的管理。Go中是否有Arrays.copyOfRange的等效项?简单的一行代码是(省略索引检查): 一个简单的“几乎”就可以完成这项工作,但是由于Java的Arrays.copyOfRange()返回一个独立于源代码的副本,我们需要将切片结果复制到一个新切片(因为切片的结果将共享备份数组) 我们可以通过分配一个,并使用内置的,或者简单地使用将它附加到一个空的或nil片,这将负责分配和复制 使用上述函数的示例: src := []byte{0, 1, 2,
Arrays.copyOfRange()
返回一个独立于源代码的副本,我们需要将切片结果复制到一个新切片(因为切片的结果将共享备份数组)
我们可以通过分配一个,并使用内置的,或者简单地使用将它附加到一个空的或nil
片,这将负责分配和复制
使用上述函数的示例:
src := []byte{0, 1, 2, 3, 4, 5}
dst := copyOfRange(src, 2, 4)
fmt.Println(dst)
输出(在上尝试):
为了完整起见,这是使用make()
和copy()
时的情况:
这里需要注意的一点是:内置的append()
分配的空间超出了需要,考虑到未来的增长。因此,如果您不打算“增长”返回的切片,copyOfRange2()
是一个更好的选择
请参见此比较:
dst := copyOfRange(src, 2, 4)
fmt.Println(dst, cap(dst))
dst = copyOfRange2(src, 2, 4)
fmt.Println(dst, cap(dst))
输出(在上尝试):
如您所见,
append()
(在copyOfRange()
内部)分配了一个大小为8
的后备数组,而在我们的copyOfRange2()
中,我们明确分配了大小为2
的片(和后备数组)一个简单的单行程序将是(省略索引检查):
一个简单的“几乎”就可以完成这项工作,但是由于Java的Arrays.copyOfRange()
返回一个独立于源代码的副本,我们需要将切片结果复制到一个新切片(因为切片的结果将共享备份数组)
我们可以通过分配一个,并使用内置的,或者简单地使用将它附加到一个空的或nil
片,这将负责分配和复制
使用上述函数的示例:
src := []byte{0, 1, 2, 3, 4, 5}
dst := copyOfRange(src, 2, 4)
fmt.Println(dst)
输出(在上尝试):
为了完整起见,这是使用make()
和copy()
时的情况:
这里需要注意的一点是:内置的append()
分配的空间超出了需要,考虑到未来的增长。因此,如果您不打算“增长”返回的切片,copyOfRange2()
是一个更好的选择
请参见此比较:
dst := copyOfRange(src, 2, 4)
fmt.Println(dst, cap(dst))
dst = copyOfRange2(src, 2, 4)
fmt.Println(dst, cap(dst))
输出(在上尝试):
如您所见,
append()
(在copyOfRange()
内部)分配了一个大小为8
的后备数组,而在我们的copyOfRange2()
中,我们明确分配了一个大小为2
的片(和后备数组)您可能需要解释该方法的作用,正如当前的问题(不必要的)需要Go和Java知识才能回答,这降低了获得答案的可能性以及问题的未来价值。您可能需要解释该方法的作用,因为该问题目前(不必要)需要Go和Java知识才能回答,这降低了获得答案的可能性以及问题的未来价值。
dst := copyOfRange(src, 2, 4)
fmt.Println(dst, cap(dst))
dst = copyOfRange2(src, 2, 4)
fmt.Println(dst, cap(dst))
[2 3] 8
[2 3] 2