Maison  >  Article  >  développement back-end  >  Comment initialiser une tranche avec à la fois la valeur initiale et la capacité ?

Comment initialiser une tranche avec à la fois la valeur initiale et la capacité ?

WBOY
WBOYavant
2024-02-08 22:18:301013parcourir

Comment initialiser une tranche avec à la fois la valeur initiale et la capacité ?

L'éditeur PHP Baicao vous présentera comment utiliser à la fois la valeur initiale et la capacité lors de l'initialisation de la tranche pour améliorer l'efficacité du code. En PHP, une tranche est un tableau dynamique qui peut s'agrandir ou se réduire dynamiquement selon les besoins. Habituellement, lors de l'initialisation d'une tranche, nous pouvons spécifier une valeur initiale, mais nous ne pouvons pas spécifier directement la capacité. Cependant, il existe une astuce pour initialiser une tranche en utilisant à la fois la valeur initiale et la capacité, jetons-y un œil !

Contenu de la question

Une partie du code est la suivante :

const estimatedsize = 10000
var init_arr = [...]int{1,1,2,3,5,8,13}
var fibbo []int = make([]int, len(init_arr), estimatedsize)    
}

Tranchesfibbo在c++中没有像向量那样的reserved函数来为切片保留estimatedsize pour réduire le temps de copie lors de l'augmentation de la capacité. Je ne peux donc attribuer une taille estimée à la capacité qu'au moment de l'initialisation. Mais aucun des éléments suivants n’est légal.

var fibbo []int = init_arr[::estimatedsize]
var fibbo []int = make([]int{1,1,2,3,5,8,13}, len(init_arr), estimatedsize)

Existe-t-il une solution à ce problème ? Ou peut-être que c'est un code maladroit et que ce qui suit est le seul moyen ?

var fibbo []int = make([]int, len(init_arr), ESTIMATEDSIZE) 
for i:= range init_arr {
    fibbo[i] = init_arr[i]
}

Solution

Non, ce n'est pas possible. Cela fait partie de la philosophie de conception go qui a guidé cette décision de conception : "Ne cachez pas la complexité

".

Votre code "maladroit" est en fait la manière préférée et idiomatique de procéder ainsi, avec un petit changement :

var fibbo = make([]int, len(init_arr), estimatedsize) 
for i := range init_arr {
    fibbo[i] = init_arr[i]
}

Le seul changement que j'ai apporté (outre le formatage) a été de supprimer le type de la déclaration var, car il était complètement redondant. En d'autres termes :

-var fibbo []int = make([]int, len(init_arr), estimatedsize) 
+var fibbo = make([]int, len(init_arr), estimatedsize)

Comme indiqué dans les commentaires, si vous n'apportez aucune autre modification à l'entrée, vous pouvez également utiliser le copy intégré pour éliminer la boucle for :

var fibbo = make([]int, len(init_arr), ESTIMATEDSIZE)
copy(fibbo, init_arr)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer