Gerar fatia que contém elemento
-
29-09-2020 - |
Pergunta
Suponha que eu tenha o array:
[2, 3, 4, 5, 6, 7, 8, 9]
Agora com base em alguns parâmetros:
current_item
- item atualmente selecionado.select_size
- tamanho da seleção, sempre ímpar.
Quero obter uma sublista da lista que siga as condições:
- item_atual deve estar no meio da sublista, se isso for possível.
- Caso não haja elementos suficientes à esquerda/direita da lista, use os da direita/esquerda.
Exemplos:
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]
Solução
Seja o índice do item central $c$, e o comprimento da lista será $2r+1$.Assumimos que os índices da lista são $0,\ldots,n-1$.
Existem quatro casos a considerar:
- Se $n > 2r+1$, os resultados serão indefinidos (de acordo com sua postagem).
- Se $0 \leq c-r$ e $c+r \leq n-1$, então você apenas pega os elementos $c-r,\ldots,c+r$.
- Se $c-r < 0$, então você pega elementos $0,\ldots,2r$.
- Se $c+r \geqn$, então você pega elementos $n-2r-1,\ldots,n-1$.
Nos dois últimos casos, temos a garantia de estar dentro dos limites, uma vez que $n > 2r+1$.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange