Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go中的Java Arrays.copyOfRange的等价物是什么?_Java_Arrays_Go - Fatal编程技术网

Go中的Java Arrays.copyOfRange的等价物是什么?

Go中的Java Arrays.copyOfRange的等价物是什么?,java,arrays,go,Java,Arrays,Go,我正在致力于创建一个Java库来处理数组的管理。Go中是否有Arrays.copyOfRange的等效项?简单的一行代码是(省略索引检查): 一个简单的“几乎”就可以完成这项工作,但是由于Java的Arrays.copyOfRange()返回一个独立于源代码的副本,我们需要将切片结果复制到一个新切片(因为切片的结果将共享备份数组) 我们可以通过分配一个,并使用内置的,或者简单地使用将它附加到一个空的或nil片,这将负责分配和复制 使用上述函数的示例: src := []byte{0, 1, 2,

我正在致力于创建一个Java库来处理数组的管理。Go中是否有Arrays.copyOfRange的等效项?

简单的一行代码是(省略索引检查):

一个简单的“几乎”就可以完成这项工作,但是由于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
的片(和后备数组)一个简单的单行程序将是(省略索引检查):

一个简单的“几乎”就可以完成这项工作,但是由于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