Возможно ли в Swift возвращать Int и список int одновременно? - PullRequest
0 голосов
/ 24 февраля 2020

Я должен написать функцию в Swift, где мне нужно создать список int, если счетчик отличается от 0. Вот мой код в 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!)

Спасибо за ваш ответ.

1 Ответ

1 голос
/ 24 февраля 2020

Вам нужно несколько изменить свою функцию, чтобы она возвращала [[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)
}
...