如何收集一个集合中的项目,这些项目是另一个集合的乘法

问题描述 投票:0回答:1

我遇到了这个问题:“你的函数接收两组 Int。返回第一组中的一组新元素,这些元素是第二组大小的倍数。” 它来自 Hyperskill,我创建的代码虽然在 IntelliJ 中正确运行,但未被接受。可能是什么问题?

fun solution(first: Set<Int>, second: Set<Int>): Set<Int> {
    val tempSet = mutableSetOf<Int>()
    var finalSet = emptySet<Int>()
    var isDiv = false
    for (f in first) {
        for (s in second) {
            if(f % s == 0){
                isDiv = true
                if(s == second.last()){
                    tempSet.add(f)
                }
            } else { break }
        }
        isDiv = false
    }
    finalSet = tempSet
    return finalSet
}
kotlin set
1个回答
0
投票

脱离措辞,第一组的值是第二组的Size的倍数,可以像这样完成吗?

注意:这些都没有经过测试***

fun solution(first: Set<Int>, secondSize: Int): Set<Int> {
    val mResult = mutableSetOf<Int>()
    // Loop through first set, checking if they are 
    // multiples of second sets Size
    first.forEach { value ->
        if (value % secondSize == 0) {
            mResult.add(value)
        }
    }
    
    // Return the resulting set
    return mResult
}

或者,如果您需要查看每个索引处的值是否是第二组中任何值的倍数,就像您当前的代码一样,您可以这样做

fun solution(first: Set<Int>, second: Set<Int>): Set<Int> {
    val mResult = mutableSetOf<Int>()
    // Loop through first set
    first.forEach { value ->
        // Loop through second, checking each value against the value from first, 
        // also check if resulting set already contains said value so we don't 
        // end up with multiples of the same value
        second.ForEach {
            If (value % it == 0 && !mResult.contains(it)) {
                mResult.add(value)
            }
        }
    }
    
    // Return the resulting set
    return mResult
}

我在手机上输入了此内容,因此请仔细检查是否有拼写错误。如果您不熟悉以及其他可能不知道的人,Kotlin 有一些您可以利用的漂亮东西。如果可能的话,我更喜欢使用 .forEach,它可以节省一些输入,并且当您回顾代码时更容易阅读。如果您需要知道循环的索引,可以使用 .forEachIndexed 但这并不适用于所有情况。您需要指定索引的名称和值,如下所示:

mSomeList.forEachIndexed { index, value ->
    // Do something with index and value
}

如果列表包含该值,则使用 mResult.contains(it) 返回 true,这似乎很清楚。但是添加一个!一开始基本上会让它返回相反的结果。这与 == 和 != 是相同的概念。

© www.soinside.com 2019 - 2024. All rights reserved.