Как добавить / добавить в массив массивов в Swift на основе указанного индекса? [[String]] () - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу создать массив массивов для строк [[String]]() и иметь возможность указать по индексу, какой внутренний список я хочу добавить к

У меня есть переменная, объявленная как: var myList = [[String]]

В идеале я хочу, чтобы это было примерно так: [ ["a","b"], ["l","m"] ] и иметь возможность указать, какой внутренний список получает новый элемент / букву через индекс, который я пробовал:

myList[index].insert("c", at: index) //gives and error saying index out of range

myList[index].append("c") //gives and error saying index out of range

if myList[index].isEmpty {
myList[index].append("c")
}//gives and error saying index out of range

, но всякий раз, когда я попробуйте добавить к нему, я получаю индекс вне диапазона ошибки, как показано выше.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Сначала необходимо указать размер первого измерения. Если вы точно знаете, что у вас будет n массив, вы можете решить проблему следующим образом:

var myList: [[String]] = .init(repeating: [], count: n)
// which is shorthand for
var myList: [[String]] = Array(repeating: [], count: n)
// which can be rewritten like
var myList = Array<[[String]]>(repeating: [], count: n)

И вы можете использовать его следующим образом:

var myList: [[String]] = .init(repeating: [], count: 4)
myList[0].append("a")
myList[1].append("b")
myList[1].append("c")
myList[2].append(contentsOf: ["d", "f"])
myList[2].insert("e", at: 1)

print(myList)
> [["a"], ["b", "c"], ["d", "e", "f"], []]

Или, если вы знаете, что это будет матрица NxM, вы также можете сделать

var myList: [[String]] = .init(repeating: .init(repeating: "", count: m), count: n)

0 голосов
/ 25 февраля 2020

Проблема, с которой вы сталкиваетесь, заключается в том, что, поскольку вы инициализируете myList как пустой массив (var myList: [[String]] = []), вы не можете ссылаться на элементы по указанным c индексам.

Вы можете создать метод, подобный чтобы убедиться, что вы не обращаетесь к несуществующим индексам:

func addToNested(_ index: Int, _ item: String) {
    while index >= myList.count {
        myList.append([])
    }
    myList[index].append(item)
}

Таким образом, он проверит, что у вас достаточно массивов, вложенных в myList. Таким образом, если вы называете следующее:

addToNested(0, "a")
addToNested(1, "l")
addToNested(0, "b")
addToNested(1, "m")

myList будет равно [["a", "b"], ["l", "m"]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...