在Swift中是否可以同时返回一个Int和一个Int列表?

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

我必须在Swift中编写一个函数,如果计数器的值不同于0,我需要在其中创建一个int列表。这是我在Swift中的代码:

func compteurZeros(cellule:[[Int]]) -> (compteur:Int, liste:(Int))
{
    var compteur = 0;
    for i in 0...2
    {
        for j in 0...2
        {
            if(cellule[i][j] == 0)
            {
                compteur = compteur+1
            }
        }
    }
    print(compteur)
    if (compteur != 0)
    {
        for i in 0..<(compteur) {
            var liste:(Int)
        }
    }
    return (compteur, liste!)
}

但是,作为回报,我遇到了这个错误:

error: use of unresolved identifier 'liste'
        return (compteur, liste!)

谢谢您的回答。

swift list int optional identifier
1个回答
1
投票

您需要稍微改变一下函数,以便它返回[[Int]]作为元组中的第二个元素

func compteurZeros(cellule:[[Int]]) -> (compteur:Int, liste:[[Int]]) {
    var compteur = 0;
    for i in 0...2
    {
        for j in 0...2
        {
            if(cellule[i][j] == 0)
            {
                compteur = compteur+1
            }
        }
    }

    var liste = [[Int]]()
    if (compteur != 0)
    {
        for i in 0..<(compteur) {
            liste.append([])
        }
    }
    return (compteur, liste)
}

现在此代码不是最好的,因此可以通过跳过循环加以改进

func compteurZeros(cellule:[[Int]]) -> (compteur:Int, liste:[[Int]]) {
    let compteur = cellule.flatMap {$0}.filter {$0 == 0}.count
    let liste:[[Int]] = Array(repeating: [], count: compteur)

    return (compteur, liste)
}

由于值compteur是冗余的,因此可以进一步简化为

func compteurZeros(cellule:[[Int]]) -> [[Int]] {
    return Array(repeating: [], count: cellule.flatMap {$0}.filter {$0 == 0}.count)
}
© www.soinside.com 2019 - 2024. All rights reserved.