1
votes

Mettre en miroir l'index dans le tableau

Disons que j'ai un tableau de taille n. Maintenant, quand obtenir un index i qui peut être dans la plage de [-n; 2n-1] Je souhaite indexer le tableau comme suit

 entrez la description de l'image ici Les flèches indiquent quel élément doit être retourné si je passe en dessous de 0 (jaune) ou au-dessus de n - 1 (bleu)


7 commentaires

La taille du tableau est-elle toujours de 5? Le reproduisez-vous toujours dans un tableau de 15 éléments?


non, la taille du tableau est arbitraire, mais elle est donnée


Le miroir est-il toujours 3x la taille du tableau alors?


oui si la taille est n, la plage est [-n; 2n-1]


Cela dépend de ce que vous entendez par "toute manière intelligente" Vous pouvez certainement le faire avec quelques instructions if .


J'utilise ceci afin d'indexer dans une image 2D (une fois pour l'axe x et une fois pour l'axe y). Donc, en fonction de la taille de l'image, je ne veux pas appeler quelques instructions if pour chaque pixel.


veuillez partager le code de ce que vous avez essayé jusqu'à présent


3 Réponses :


0
votes
function mirrorArr(arr) {
    let newArr = [];
    newArr.length = arr.length * 3;

    for(let i = 0; i < arr.length; i++) {
        newArr[-arr[i]-1] = arr[i];
        newArr[i] = arr[i];
        newArr[i+arr.length] = arr.length-i-1;
    }
    return newArr;
}
let arr = [0, 1, 2, 3, 4];
let mirroredArr = mirrorArr(arr);
console.log(mirroredArr[-5]);
something like this does the trick 

0 commentaires

1
votes

Supposons que votre tableau de valeurs possibles soit de longueur n (dans notre cas, [0, 1, 2, 3, 4] a une longueur de 5). La longueur totale du miroir sera de longueur 2n - 1:

possibleIndex = ((v + n - 1) % 2n - 1)
if (possibleIndex >= n) actualIndex = possibleIndex - n + 1
else possibleIndex = actualIndex = n = possibleIndex

Maintenant, en supposant que le tableau de valeurs à l'index 0 a le milieu du miroir (0), vous devez travailler avec arithmétique modulaire, avec la formule de

result[v] = possibleValues[((v + n - 1) % 2n - 1)]

maintenant, puisque votre tableau réel ressemble à [0, 1, 2, 3, 4], vous devez convertir cet index utilisé à valeurs possibles à quelque chose qui est plus utile pour votre tableau actuel:

possibleValues = [4, 3, 2, 1, 0, 1, 2, 3, 4]


0 commentaires

0
votes

Pour obtenir le résultat attendu, utilisez l'option ci-dessous en utilisant l'opérateur de propagation et la méthode de tableau inversé

var arrOne = [0,1,2,3,4];
var result = []
var revArr = [...arrOne].reverse()
result = [...revArr,...arrOne, ...revArr]

console.log(result)


0 commentaires