Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

189
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!