Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

186
Visualizações
El subíndice perezoso de Swift ignora el filtro

¿Cómo funciona la subíndice de un filtro perezoso?

 let ary = [0,1,2,3] let empty = ary.lazy.filter { $0 > 4 }.map { $0 + 1 } print(Array(empty)) // [] print(empty[2]) // 3

Parece que simplemente ignora el filtro y hace el mapa de todos modos. ¿Está esto documentado en alguna parte? ¿Qué otras colecciones perezosas tienen un comportamiento excepcional como este?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Todo se reduce a subíndices de LazyFilterCollection con un número entero que, en este caso, ignora el predicado y reenvía la operación de subíndices a la base.

Por ejemplo, si buscamos los enteros estrictamente positivos en una matriz:

 let array = [-10, 10, 20, 30] let lazyFilter = array.lazy.filter { $0 > 0 } print(lazyFilter[3]) // 30

O, si estamos buscando los caracteres en minúsculas en una cadena:

 let str = "Hello" let lazyFilter = str.lazy.filter { $0 > "Z" } print(lazyFilter[str.startIndex]) //H

En ambos casos, el subíndice se reenvía a la colección base.

La forma correcta de subíndices de LazyFilterCollection es usar un LazyFilterCollection<Base>.Index como se describe en la documentación :

 let start = lazyFilter.startIndex let index = lazyFilter.index(start, offsetBy: 1) print(lazyFilter[index])

Lo que da como resultado 20 para el ejemplo de matriz, o l para el ejemplo de cadena.


En su caso, tratando de acceder al índice 3 :

 let start = empty.startIndex let index = empty.index(start, offsetBy: 3) print(empty)

generaría el error de tiempo de ejecución esperado:

Error fatal: Índice fuera de rango

over 4 years ago · Santiago Trujillo Relatório

0

Para agregar a la respuesta de Carpsen90, se encuentra con una de las particularidades de Collection : no se recomienda ni es seguro acceder a las colecciones mediante un índice absoluto, incluso si el sistema de tipos lo permite. Porque la colección que recibe puede ser un subconjunto de otra.

Tomemos un ejemplo más simple, el corte de matrices:

 let array = [0, 1, 2, 3, 4] let slice = array[2..<3] print(slice) // [2] print(slice.first) // Optional(2) print(slice[0]) // crashes with array index out of bounds

Incluso si slice es una colección indexable por un número entero, no es seguro usar números enteros absolutos para acceder a elementos de esa colección, ya que la colección puede tener un conjunto diferente de índices.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda