Tengo un trozo de código. No estoy recibiendo lo que pasa en el interior de este código. ¿Alguien puede explicarlo?

 let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]

        let res = wordFreqs.filter(
        {
            (e) -> Bool in

            if e.1 > 3 {
                return true
            } else {
                return false
            }

        }).map { $0.0 }

        print(res)

Da De Salida:

["k","a"]
simple, en primer lugar, la matriz ha sido filtrada (por valor > 3) a continuación, se asigna (de la llave), usted puede leer más sobre el lenguaje Swift de Apple del libro.
Si alguien tiene algún problema con mi pregunta. Por favor, dar comentario en lugar de sólo negativo de la marca.
Me imagino que el voto es porque esta es una pregunta muy simple que puede ser respondidas por la lectura de las primeras páginas de la libre Swift libro editado por Apple. La pregunta aquí muestra una falta de esfuerzo puesto en la comprensión del código antes de preguntar. (No es mi voto, aunque. Para que quede claro.)
Sé que, pero quiero entender de manera sencilla. Después de buscar sobre ella cuando sentí que el concepto no es muy claro para mí entonces me pregunté aquí. Es algo de malo en ello?
No veo por qué la gente-votaron a favor de esta pregunta. Usted necesita más que leer las primeras páginas de la doc para entenderlo, ya que incluye muchas nociones: tuplas, el filtro, el mapa, los cierres, la función de encadenamiento, … Como, por uno, hasta votado. Estoy convencido de que ASÍ no está reservada a los altos de los programadores, y los principiantes son bienvenidos aquí.

OriginalEl autor Amanpreet | 2017-01-20

4 Comentarios

  1. 11

    Si tomamos las partes de este código, una después de la otra:

    let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]

    Usted comienza con una variedad de tuplas.

    De la documentación de Swift:

    Un tipo tupla es una lista separada por comas de los tipos, se incluyen entre paréntesis.

    y:

    Tuplas grupo de varios valores en un único valor compuesto. Los valores dentro de una tupla puede ser de cualquier tipo.

    En este caso, las tuplas son «parejas» de 2 valores, uno de tipo String y 1 de tipo Int.


            let res = wordFreqs.filter(
            {
                (e) -> Bool in

    Esta parte se aplica un filtro en la matriz. Aquí puede ver que el cierre del filtro lleva un elemento de e, de modo que, en nuestro caso, una tupla), y devuelve un Bool. Con el ‘filtro’ de la función, que devuelve true significa mantener el valor, devolviendo false significa que filtrarlo.


                if e.1 > 3 {
                    return true
                } else {
                    return false
                }

    La e.1 sintaxis devuelve el valor de la tupla en un índice de 1.
    Por lo tanto, si la tupla valor del índice 1 (el segundo) es de más de 3, el filtro devuelve true (por lo que la tupla se mantendrá) ; si no, el filtro devuelve false (y, por tanto, excluye la tupla del resultado).
    En ese momento, el resultado del filtro será [("k", 5), ("a", 7)]


            }).map { $0.0 }

    El mapa de la función crea una nueva matriz basada en la tupla de la matriz: para cada elemento de la matriz de entrada ($0), se devuelve el valor tupla en el índice 0. Así que la nueva matriz es ["k", "a"]


            print(res)

    Este imprime el resultado en la consola.


    Estas funciones (filtro, mapa, reducir, etc.) son muy comunes en la programación funcional.
    Ellos son a menudo encadenados utilizando la sintaxis de punto, por ejemplo, [1, 2, 3].filter({ }).map({ }).reduce({ })

    Gracias por tu explicación!
    Con el placer! Todavía estoy añadiendo algunos detalles para hacerla aún más comprensible.
    Si una de las respuestas que se adapte a usted, ¿podría usted por favor marca como el aceptado la respuesta? Gracias

    OriginalEl autor Frédéric Adda

  2. 8
    //this creates an array of tuples
    let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]
    
    let res = wordFreqs.filter {
        (e) -> Bool in
    
        //this filters the array
        //it removes any items that have the second part of the tuple
        //of 3 or less
        if e.1 > 3 {
            return true
        } else {
            return false
        }
    }.map {
        //this "maps" the array and returns the first part of the tuple
        $0.0
    }
    
    print(res)

    Nota… si yo estaba escribiendo esto quisiera reducir a algo así como…

    let res = wordFreqs.filter { $0.1 > 3 }
                       .map { $0.0 }
    Gracias!!!!!!!!!!!!!!!!!!!

    OriginalEl autor Fogmeister

  3. 1

    wordFreqs es la matriz de tuple.

    Tuplas

    Una tupla es un conjunto de cero o más valores representados como un valor.

    Por ejemplo («Juan», «Pérez») contiene el nombre y apellido de una persona. Usted puede acceder a los valores internos de usar el punto(.) la notación seguida por el índice del valor:

    var person = ("John", "Smith")
    
    var firstName = person.0 //John
    var lastName = person.1 // Smith

    Ahora en tu caso, tienes tupla con el tipo (String, Int) y con filter comparar los e.1 > 3(Aquí e es tiene la tupla valor de la matriz de iteración con filter) significa que eso es second(Int) valor es mayor que 3.

    Ahora, después de que su uso map en el filter resultado y sólo resintonizar la String($0.0) de la tupla.

        //array of tuples
        let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]
    
        let res = wordFreqs.filter(
        {
            (e) -> Bool in
            //Comparing the Second Int value of tuple in filter
            if e.1 > 3 {
                return true
            } else {
                return false
            }
    
        })
        //Mapping the result of filter
        .map { 
             //return the String from the tuple
             $0.0 
        }
    Bueno! Y ¿qué es la «e» de aquí? Y Cuando ejecuto el código no va a ir en el interior del método de filtro. por qué?
    Compruebe el soporte de la declaración en mi respuesta: e.1 > 3(Here e is holds the tuple value from the array iteration with filter)
    Lo mismo va para map también, pero en que lugar es el uso de $0.
    Si desea quitar el código, entonces simplemente como let res = wordFreqs.filter { $0.1 > 3 }.map { $0.0 }
    Bienvenido compañero 🙂

    OriginalEl autor Nirav D

  4. 1

    Su e objeto que representa (String, int) tipo. Como se puede ver en la matriz dentro de [("k", 5), ("a", 7), ("b", 3)].

    Primero de todos usted está usando filter método es por eso que usted tiene que devolver true o false valores. En este caso, compruebe si e.1 (int valor) es mayor que 3, si no devuelve false. Después de todo ese proceso, el filter método de devolución de filtrado de la matriz de (String,int) de los objetos.

    Siguiente paso es map función. En tu caso es simple, es solo mapa de todos los valores de matriz para el primer objeto de su tupla (String, int).

    Para entender mejor el código podría tener este aspecto:

    let filteredArray = wordFreqs.filter
    ({
        (e) -> Bool in
        return e.1 > 3
    })//the filteredArray is [("k", 5), ("a", 7)]
    
    
    let finalValue = filteredArray.map { 
      $0.0
    }//here you're creating a new array with String. $0 represents object from filteredArray
    
    print(finalValue) // ["k", "a"]
    Gracias. Ahora entiendo el concepto.

    OriginalEl autor kamwysoc

Dejar respuesta

Please enter your comment!
Please enter your name here