Nyx con Ejemplos

Iterador: take() y skip()

take(n) limita un iterador a sus primeros n elementos, mientras que skip(n) descarta los primeros n y produce el resto. Juntos forman los bloques básicos de ventanas deslizantes, recortes y paginación sobre cualquier secuencia.

Código

// Iteradores: skip() y take() para componer pipelines de datos

fn main() -> int {
    let nums: Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    // skip(2): omitir los primeros 2 elementos
    let sin_primeros2: Array = nums.iter().skip(2).collect()
    print("skip(2): " + int_to_string(sin_primeros2.length()) + " elementos")

    // take(3): tomar solo los primeros 3
    let solo3: Array = nums.iter().take(3).collect()
    print("take(3): " + int_to_string(solo3.length()) + " elementos")
    let v0: int = solo3[0]
    let v2: int = solo3[2]
    print("  [0]=" + int_to_string(v0) + " [2]=" + int_to_string(v2))

    // Combinacion: skip(2).take(3) — elementos 3, 4, 5
    let ventana: Array = nums.iter().skip(2).take(3).collect()
    print("skip(2).take(3): " + int_to_string(ventana.length()) + " elementos")
    var i: int = 0
    while i < ventana.length() {
        let v: int = ventana[i]
        print("  " + int_to_string(v))
        i = i + 1
    }

    // Otro uso: paginar — página 2, tamaño 3
    let pagina2: Array = nums.iter().skip(3).take(3).collect()
    print("pagina 2 (skip 3, take 3): " + int_to_string(pagina2.length()) + " elementos")

    return 0
}

Salida

skip(2): 8 elementos
take(3): 3 elementos
  [0]=1 [2]=3
skip(2).take(3): 3 elementos
  3
  4
  5
pagina 2 (skip 3, take 3): 3 elementos

Explicación

skip(2) sobre un array de 10 elementos produce los elementos en las posiciones 2 a 9, dando 8 elementos. take(3) detiene el iterador después de los primeros 3 elementos, produciendo [1, 2, 3] — así que [0] es 1 y [2] es 3.

Encadenar skip(2).take(3) primero descarta dos elementos, y luego limita el resto a tres — produciendo [3, 4, 5]. Este es el patrón clásico de ventana deslizante. El orden importa: take(3).skip(2) en cambio daría un único elemento.

El ejemplo de paginación al final muestra un uso real directo: para obtener la página P de tamaño N, se escribe .skip((P-1) * N).take(N). Ambos adaptadores son perezosos — no se asigna ningún elemento hasta que se llama a .collect().

← Anterior Siguiente →

Source: examples/by-example/32-iterator-take-skip.nx