显示范围内给定数字的倍数

时间:2019-02-01 03:10:16

标签: collections foreach kotlin range

如何以更好的方式(替换从第一个元素到最后一个元素的范围)来修复以下代码?我的目标是以最有效,最简单的方式编写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

编辑2: @Saurabh Patel或任何其他专家 您能告诉我为什么以下代码不起作用吗?

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

5 个答案:

答案 0 :(得分:2)

您可以一行完成:

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

答案 1 :(得分:1)

这可能就是您要寻找的

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

答案 2 :(得分:1)

对于此代码,您有一个错字:

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

答案 3 :(得分:0)

玩完代码后,这是另一种方式,但是谢尔盖的回答是最干净的一种,谢谢

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

答案 4 :(得分:0)

您可以暂时跟踪原始值和计算值,然后打印并映射到计算值:

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

范围函数also用于记录结果的副作用,对calc无任何作用。