【问题标题】:Show multiples of a given number within a range显示范围内给定数字的倍数
【发布时间】:2019-06-25 14:34:46
【问题描述】:

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

【问题讨论】:

    标签: loops kotlin foreach collections range


    【解决方案1】:

    这可能就是你要找的东西

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

    【讨论】:

    • 感谢您的回答,您的代码比我轻得多,我会接受您的回答作为对此线程的回复,但只是最后一个问题,我只是好奇,如果我必须使用地图,出于学习目的,如何我可以迭代吗?你能编辑你的帖子并告诉我如果我必须使用地图,答案会如何,谢谢
    • 我编辑我的问题以澄清我的意思,请参阅编辑 2,谢谢
    • @Jack 在您的编辑 2 中,您错误地使用了名称“它”。更多信息请参考this
    • 我参考了您的链接,但找不到答案,请告诉我如何更正edit2,谢谢
    【解决方案2】:

    对于这段代码,你有一个错字:

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

    您不能在forEach 中使用it,因为您将变量命名为n

    或者,同样的事情可以使用it

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

    【讨论】:

    • 对不起,没有按照您的要求工作,您的答案产生的输出与我的目标不同:7 * 7 = 7 --------- 14 * 7 = 14 ---- -- 21 * 7 = 21 .....
    • 面部护理。我没有运行代码。如果不撤消乘法,您将无法使用numMul7.forEach。您应该改用numList.forEachnumListnumMul7
    【解决方案3】:

    你可以在一行中完成:

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

    【讨论】:

    • 反响很好!
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      作用域函数also用于记录结果的副作用,对calc没有任何作用。

      【讨论】:

      • 你用的是什么版本?我看不出它不应该起作用的原因。 fwiw,我在 1.3,但很确定它会运行 >= 1.1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2022-11-10
      • 2014-04-27
      相关资源
      最近更新 更多