1
votes

Afficher les multiples d'un nombre donné dans une plage

Comment puis-je corriger le code suivant de manière plus efficace (moyen alternatif d'itérer la plage du premier élément au dernier élément? Mon objectif est d'écrire du code kotlin de la manière la plus efficace et la plus simple.

Je cherche quelqu'un me dire au lieu de n / 7 que dois-je écrire pour obtenir le même résultat de code

val numList =  1..20
val numMul7= numList.map { it *7 }
numMul7.forEach { n -> println("${it} * 7 = $n") };

voici la sortie:

1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
....
12 * 7 = 84
13 * 7 = 91
14 * 7 = 98
15 * 7 = 105
16 * 7 = 112
17 * 7 = 119
18 * 7 = 126
19 * 7 = 133
20 * 7 = 140

Modifier 2: @Saurabh Patel ou tout autre expert Pouvez-vous me dire pourquoi le code suivant ne fonctionne pas?

val numList =  1..20
val numMul7= numList.map { it *7 }

// here what else instead of n/7 can i use to get same result and it iterate the range from the first element to the last one
numMul7.forEach { n -> println("${n/7} * 7 = $n") };


0 commentaires

5 Réponses :


1
votes

Cela peut être ce que vous recherchez

val numList =  1..20
numList.forEach{
    println("${it} * 7 = ${it*7}")
}


4 commentaires

merci pour la réponse votre code est beaucoup plus léger que moi, j'accepterai votre réponse comme réponse à ce fil mais juste dernière question, je suis juste curieux, à des fins d'apprentissage si je dois utiliser la carte, comment puis-je itérer? pouvez-vous modifier votre message et me montrer si je dois utiliser la carte, comment la réponse serait, merci


je modifie ma question pour clarifier ma signification, veuillez voir modifier 2, merci


@Jack Dans votre édition 2, vous avez mal utilisé le nom 'it'. Reportez-vous à ceci pour Plus d'informations


J'ai fait référence à votre lien, mais je ne trouve pas la réponse, s'il vous plaît laissez-moi savoir comment puis-je corriger le edit2, merci



1
votes

Pour ce code, vous avez une faute de frappe:

val numList =  1..20
val numMul7= numList.map { it * 7 }
numMul7.forEach { println("$it * 7 = $it") }

Devrait être:

val numList =  1..20
val numMul7= numList.map { it * 7 }
numMul7.forEach { n -> println("${n} * 7 = $n") }

Vous ne pouvez pas utiliser it code> dans le forEach , car vous avez nommé la variable n.

Ou, la même chose peut être faite en utilisant it code >:

val numList =  1..20
val numMul7= numList.map { it * 7 }
numMul7.forEach { n -> println("${it} * 7 = $n") }


2 commentaires

Désolé, ne fonctionne pas comme vous le souhaitez, votre réponse produit ceci en sortie qui est différente de mon objectif: 7 * 7 = 7 --------- 14 * 7 = 14 ------ 21 * 7 = 21. ....


Facepalm. Je n'ai pas exécuté le code. Vous ne pourrez pas utiliser numMul7.forEach sans annuler votre multiplication. Vous devez utiliser numList.forEach à la place ou numList et numMul7 .



2
votes

Vous pouvez le faire en une seule ligne:

fun IntRange.getMultipliersBy(multiplier: Int): List<Int> {
    return map { it * multiplier }
}

//call it like this
(1..20).getMultipliersBy(7).forEach { println("${it/7} * 7 = $it") }
(1..40).getMultipliersBy(10).forEach { println("${it/10} * 10 = $it") }

Ou la même chose avec juste la fonction forEach :

fun getMultipliersBy(range: IntRange, multiplier: Int): List<Int> {
    return range.map { it * multiplier }
}

// we can call it like this
getMultipliersBy(1..20, 7).forEach { println("${it/7} * 7 = $it") }
getMultipliersBy(1..40, 10).forEach { println("${it/10} * 10 = $it") }

Si vous avez besoin de sauvegarder le résultat dans une variable:

val listOfMultipliers = (1..20).map { it * 7 }

Si nous utilisons une manière plus abstraite:

(1..20).forEach { println("$it * 7 = ${it*7}") }

Utilisation fonction d'extension :

(1..20).map { it * 7 }.forEach { println("${it/7} * 7 = $it") }


1 commentaires

Excellente réponse!



0
votes

après avoir joué avec le code, c'est une autre façon, mais la réponse de Sergey est la plus claire, merci

    val numList =  1..20
    val numMul7= numList.map { it}
    numMul7.forEach { n -> println("${n} * 7 = ${7*n}") };


0 commentaires

0
votes

Vous pouvez temporairement garder une trace de la valeur d'origine et calculée pour ensuite l'imprimer et la mapper à la valeur calculée:

val numMul7 = (1..20).map { it to it * 7 }.map { (orig, calc) ->
    calc.also { println("$orig * 7 = $calc") }
}

la fonction de portée également est utilisée pour l'effet secondaire de la journalisation des résultats et ne fait rien pour calc.


1 commentaires

Quelle version utilisez-vous? Je ne vois pas pourquoi cela ne devrait pas fonctionner. fwiw, je suis sur 1.3 mais à peu près sûr qu'il fonctionnerait avec> = 1.1