Быстрое определение типа данных массива - PullRequest
0 голосов
/ 27 марта 2020

Мне нужно как-то привести 2-мерный массив ... консоль:

solution.swift:22:23: error: missing argument label 'arr:' in call
array = invertArr(arr)
                  ^
                  arr: 
 solution.swift:53:12: error: cannot convert return expression of type '[[Any]]' to return type '[[Int]]'
return result
       ^~~~~~
              as! [[Int]]

и вот код:

func invertArr(arr:[[Int]]) -> [[Int]]{
var counter = 0
var result = [[]]
for element in arr{
    if counter == 0{
        continue
    }
    var counter2 = 0
    for item in element.reversed(){
        result[counter][counter2] = item
        counter2 += 1
    }
    counter += 1
}
return result
}

Спасибо за помощь!

1 Ответ

1 голос
/ 27 марта 2020

Из-за двух серьезных проблем ваш код не может работать в любом случае, даже если вы вызываете метод с меткой параметра arr и объявляете результат как [[Int]]().

  • Поскольку counter равно 0, первый l oop continue s всегда и возвращается пустой массив.
  • result[counter][counter2] = item надежно завершает работу, потому что нет элементов с указанными индексами.

Чтобы инвертировать порядок элементов во внутренних массивах это общая c версия

func invertArr<T>(arr: [[T]]) -> [[T]]{
    var result = arr
    for (index, element) in arr.enumerated() {
        result[index] = element.reversed()
    }
    return result
}

let array = [[1, 2, 3, 4], [5, 6, 7, 8]]
let inverted = invertArr(arr: array) // [[4, 3, 2, 1], [8, 7, 6, 5]]

Если вы хотите изменить также элементы во внешнем массиве return result.reversed()

...