Показать кратные данного числа в диапазоне - PullRequest
0 голосов
/ 01 февраля 2019

Как я могу исправить следующий код лучше (альтернативный способ перебора диапазона от первого до последнего элемента? Моя цель - написать код kotlin наиболее эффективным и простым способом

Я смотрю, кто-то подскажетмне вместо n / 7, что я должен написать, чтобы получить тот же результат кода

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") };

здесь есть вывод:

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

Edit 2: @Saurabh Patel или любой другойэксперт Не могли бы вы сообщить мне, почему следующий код не работает?

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

Ответы [ 5 ]

0 голосов
/ 01 февраля 2019

Вы можете временно отслеживать как исходное, так и рассчитанное значение, чтобы затем распечатать его и сопоставить с рассчитанным значением:

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

функция объема also используется для побочного эффекта регистрациирезультаты и ничего не делает для calc.

0 голосов
/ 01 февраля 2019

после игры с кодом, это другой способ, но Сергей ответ самый чистый, спасибо

    val numList =  1..20
    val numMul7= numList.map { it}
    numMul7.forEach { n -> println("${n} * 7 = ${7*n}") };
0 голосов
/ 01 февраля 2019

Для этого кода у вас есть опечатка:

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

Должно быть:

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

Вы не можете использовать it в forEach, потому что вы назвали переменнуюn.

Или то же самое можно сделать, используя it:

val numList =  1..20
val numMul7= numList.map { it * 7 }
numMul7.forEach { println("$it * 7 = $it") }
0 голосов
/ 01 февраля 2019

Вы можете сделать это в одной строке:

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

Или то же самое только с функцией forEach:

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

Если вам нужно сохранить результат в переменной:

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

Если мы используем более абстрактный способ:

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") }

Использование функции расширения :

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") }
0 голосов
/ 01 февраля 2019

Это может быть то, что вы ищете

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