php editor Baicao will introduce how to use both the initial value and capacity during slice initialization to improve the efficiency of the code. In PHP, a slice is a dynamic array that can grow or shrink dynamically as needed. Usually, when initializing a slice, we can specify an initial value, but we cannot directly specify the capacity. However, there is a trick to initialize a slice using both initial value and capacity, let’s take a look!
Part of the code is as follows:
const estimatedsize = 10000 var init_arr = [...]int{1,1,2,3,5,8,13} var fibbo []int = make([]int, len(init_arr), estimatedsize) }
Slicefibbo
There is no reserved
function in c like vector
to reserve estimatedsize
for the slice to reduce the problem when expanding the capacity Copy time. So I can only assign estimatedsize to capacity at initialization time. But neither of the following is legal.
var fibbo []int = init_arr[::estimatedsize] var fibbo []int = make([]int{1,1,2,3,5,8,13}, len(init_arr), estimatedsize)
Is there any solution to this problem? Or maybe it's clumsy code and the following is the only way?
var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE) for i:= range init_arr { fibbo[i] = init_arr[i] }
No, this is not possible. This is part of the go design philosophy that guides this design decision: "Don't hide complexity."
Your "clumsy" code is actually the preferred and idiomatic way of doing this in go, with one small change:
var fibbo = make([]int, len(init_arr), estimatedsize) for i := range init_arr { fibbo[i] = init_arr[i] }
The only change I made (besides the format) was to remove the type from the var
declaration, as that was completely redundant. in other words:
-var fibbo []int = make([]int, len(init_arr), estimatedsize) +var fibbo = make([]int, len(init_arr), estimatedsize)
As pointed out in the comments, if you don't make any other changes to the input, you can also use the built-in copy
to eliminate the for loop:
var fibbo = make([]int, len(init_arr), ESTIMATEDSIZE) copy(fibbo, init_arr)
The above is the detailed content of How to initialize a slice with both initial value and capacity?. For more information, please follow other related articles on the PHP Chinese website!