Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-08 22:18:30
avant
1013 Les gens l'ont consulté

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)    
}
Copier après la connexion

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)
Copier après la connexion

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]
}
Copier après la connexion

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]
}
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!