Générer une tranche contenant un élément
-
29-09-2020 - |
Question
Supposons que j'ai le tableau :
[2, 3, 4, 5, 6, 7, 8, 9]
Maintenant basé sur quelques paramètres :
current_item
- élément actuellement sélectionné.select_size
- taille de sélection, toujours impaire.
Je souhaite obtenir une sous-liste de la liste qui suit les conditions :
- article_actuel devrait être au milieu de la sous-liste si cela est possible.
- Dans le cas où il n'y a pas assez d'éléments à gauche/droite de la liste, utilisez ceux de droite/gauche.
Exemples:
list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 5
select_size: 3
result: [4, 5, 6]
list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 2
select_size: 5
result: [2, 3, 4, 5, 6]
list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 8
select_size: 5
result: [5, 6, 7, 8, 9]
La solution
Soit l'index de l'élément central $c$, et la longueur de la liste soit $2r+1$.Nous supposons que les indices de la liste sont $0,\ldots,n-1$.
Il y a quatre cas à considérer :
- Si $n > 2r+1$, alors les résultats ne sont pas définis (selon votre message).
- Si $0 \leq c-r$ et $c+r \leq n-1$, alors tu prends juste des éléments $c-r,\ldots,c+r$.
- Si $c-r < 0$, alors vous prenez des éléments $0,\ldots,2r$.
- Si $c+r \geqn$, alors vous prenez des éléments $n-2r-1,\ldots,n-1$.
Dans ces deux derniers cas, nous sommes assurés d'être dans les limites puisque $n > 2r+1$.
Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange