2017-08-18 2 views
1

J'utilise la bibliothèque RobinUS2/golang-moving-average pour calculer les avarages en mouvement, mais je suis incapable d'assembler une tranche de ces avarages pour calculer MA pour plusieurs variables.Essayer de créer une tranche de type MovingAvarage

ma := []movingaverage.MovingAverage{} 
    ma[0] = movingaverage.New(15) 
    ma[0].Add(3.14) 

Qu'est-ce qui pourrait ne pas fonctionner? Je reçois un indice hors erreur de plage. Merci!

+2

'ma' a une longueur de 0, donc vous ne pouvez pas quoi que ce soit d'index . Est-ce que 'ma' est censé avoir un nombre fixe de valeurs? – JimB

+0

oui, je connais la longueur de ma – donfrigo

Répondre

2

Vous devez soit pré-taille de la tranche avec

ma := make(movingaverage.MovingAverage, 5) 

Ce qui donne une tranche de capacité 5 et une longueur de 5 à chaque entrée réglée sur la valeur zéro

Mieux que pour initialiser comme vous mais n'ajouter de nouvelles entrées avec

ma = append(ma, movingaverage.New(15)) 

Si vous connaissez la taille de votre tranche finale sera vous pouvez pré-allouer le tableau sous-jacent avec

ma := make(movingaverage.MovingAverage, 0, 5) 

qui vous donnera une tranche de longueur 0 mais la capacité 5 de sorte que vous ne devez pas faire les allocations de mémoire répétées et se déplace

+1

Vous ne semez pas pour définir la capacité de 5 avec une longueur de 5, c'est implicite. – JimB

+0

Merci, je l'ai négligé. – donfrigo

+0

L'utilisation de 'append' provoque des allocations inutiles et des opérations de copie. Si la taille nécessaire est connue au préalable, il est préférable d'initialiser la tranche avec la capacité nécessaire et de définir l'index de tranche individuel à la valeur respective. –