В Swift 5, как я могу проверить, является ли входной 2d массив [[Int]] матрицей M x M, а не M x N - PullRequest
1 голос
/ 30 марта 2019

У меня есть входной arr: [[Int]] Как я могу проверить, является ли этот массив М х М

Итак, это должно выглядеть так:

[1,2,3]
[4,5,6]
[7,8,9]

не должен быть M x N, например:

[1,2,3]
[4,5]
[6,7,8,9]

Я пробовал arr.count, но он возвращает 3 в двух предыдущих случаях, потому что он возвращает количество подмассивов, а не их количество.

1 Ответ

2 голосов
/ 30 марта 2019

Вы должны проверить, имеют ли все «внутренние» массивы ту же длину, что и «внешний» массив. Это удобно сделать с помощью метода allSatisfy:

func isSquareMatrix<T>(_ m: [[T]]) -> Bool {
    let dim = m.count
    return m.allSatisfy { $0.count == dim }
}

Пример:

print(isSquareMatrix([[1, 2, 3], [3, 5, 6], [7, 8, 9]])) // true
print(isSquareMatrix([[1, 2, 3], [4, 5], [6, 7, 8, 9]])) // false

Вышеуказанная функция универсальная , поэтому ее можно использовать с произвольными типами элементов, а не только с [[Int]]:

print(isSquareMatrix([[1.0, 2.0], [3.0, 4.0]])) // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...