Diego Vente Seminario
Diego Vente Seminario

Reputation: 97

Kotlin - How to make a for loop that iterate and return multiple values

I created a function that iterates by a if statement over a list in order to find a match, when found I wanted to return the match value, but it only happen once, the return statements are at the end of the function and the if statement.

The question is, How can I avoid that this function stops after the first match?, is there another way?, other functions that im not using? When i run this code I get this:

  Anything      
  Not a match      
  Not a match      

Here is my code:

   class Class1(var self: String,var tipo: String,var element: String)       
   var test_class = Class1("","","")       

   fun giver(){       
      test_class.self = "Anything"       
       test_class.tipo = "Something"       
       test_class.element = "Nothing"       
   }       



   class Funciones(){       
           fun match_finder(texto: String): Any{       
               var lista = listOf<String>(test_class.self,test_class.tipo,test_class.element)       
               var lista_de_listas = listOf<String>("test_class.self","test_class.tipo","test_class.element")       
               var count = -1       
               var variable = ""       
               for (i in lista_de_listas){       
                   count = count + 1       
                   println(count)       
                   if (texto == i){       
                       lista_de_listas = lista       
                       var variable = lista_de_listas[count]        
                       return variable       

                   }           
               }       
              return "Not a match"       
           }        
       }           


   fun main(){       
       giver()       
       var x = "test_class.self"       
       var z = "test.class.tipo"       
       var t = "test.class.element"       
       var funcion = Funciones()       
       var y = funcion.match_finder(x)       
       var c = funcion.match_finder(z)       
       var r = funcion.match_finder(t)       
       println(y)       
       println(c)       
       println(r)       

   }

Upvotes: 0

Views: 2020

Answers (1)

Rene
Rene

Reputation: 6148

You have some typos in your example. You query for test.class.tipo but in your lista_de_listas you have test_class.tipo with underline. The same is true for test.class.element.

But you should consider to use a Map instead of two list to the lookup:

fun match_finder(texto: String): Any{
    val map = mapOf(
        "test_class.self" to test_class.self,
        "test_class.tipo" to test_class.tipo,
        "test_class.element" to test_class.element
        )

    return map.getOrDefault(texto,"Not a match")
}

Upvotes: 1

Related Questions