swift удаление элемента из массива
Есть массив, который определен классом, т.е. состоит из переменных, в которых содержится текст типа String и изображение UIImage . Далее, по нажатию кнопки нужно узнать, есть ли эта переменная в массиве, например, с определенным именем, и если есть, то тогда удалить его из массива. Выглядит примерно так:
class QuestSub: NSObject, NSCoding
И eсть массив:
var questSubArray: [QuestSub] = []
Далее, есть переменные определенных объектов:
let key = (QuestSub(name: "Ключик", image: UIImage(named: "ключ")!))
Которые добавляем в массив:
questSubArray.append(key)
И вот нужно узнать, если этот key в массиве, и если есть то удалить его.
Как удалить элемент из массива в Swift
Ключевое слово let предназначено для объявления констант, которые нельзя изменить. Если вы хотите изменить переменную, вам следует использовать var вместо этого, например:
var animals = ["cats", "dogs", "chimps", "moose"] animals.remove(at: 2) //["cats", "dogs", "moose"]
Немотивирующая альтернатива, которая сохранит исходную коллекцию без изменений, — это использовать filter для создания новой коллекции без элементов, которые вы хотите удалить, например:
let pets = animals.filter
Поделиться 05 июня 2014 в 04:30
var animals = ["cats", "dogs", "chimps", "moose"]
Удалить первый элемент
animals.removeFirst() // "cats" print(animals) // ["dogs", "chimps", "moose"]
Удалить последний элемент
animals.removeLast() // "moose" print(animals) // ["cats", "dogs", "chimps"]
Удалить элемент с индексом
animals.remove(at: 2) // "chimps" print(animals) // ["cats", "dogs", "moose"]
Удалить элемент с неизвестным индексом
Для только одного элемента
if let index = animals.firstIndex(of: "chimps") < animals.remove(at: index) >print(animals) // ["cats", "dogs", "moose"]
Для нескольких элементов
var animals = ["cats", "dogs", "chimps", "moose", "chimps"] animals = animals.filter() print(animals) // ["cats", "dogs", "moose"]
Примечания
- Вышеуказанные методы изменяют массив на месте (за исключением filter ) и возвращают элемент, который был удален.
- Руководство по снижению фильтра карты Swift
- Если вы не хотите изменять исходный массив, вы можете использовать dropFirst или dropLast для создания нового массива.
Обновлено до версии Swift 5.2
Поделиться 10 августа 2016 в 20:27
Вышеуказанные ответы, кажется, предполагают, что вы знаете индекс элемента, который хотите удалить.
Часто вы знаете ссылку на объект, который хотите удалить в массиве. (Вы пробежались по своему массиву и нашли его, например.) В таких случаях может быть проще работать напрямую с ссылкой на объект, не передав его индекс везде. Поэтому я предлагаю это решение. Оно использует оператор идентификации identity !== , который вы используете для проверки, ссылаются ли две ссылки на объект на один и тот же экземпляр объекта.
func delete(element: String) < list = list.filter < $0 != element >>
Конечно, это не работает только для String .
Поделиться 14 июня 2015 в 12:05
Swift 5: Вот крутое и простое расширение для удаления элементов в массиве без фильтрации:
extension Array where Element: Equatable < // Remove first collection element that is equal to the given `object`: mutating func remove(object: Element) < guard let index = firstIndex(of: object) else remove(at: index) > >
var myArray = ["cat", "barbecue", "pancake", "frog"] let objectToRemove = "cat" myArray.remove(object: objectToRemove) // ["barbecue", "pancake", "frog"]
Также работает с другими типами, такими как Int , так как Element является общим типом:
var myArray = [4, 8, 17, 6, 2] let objectToRemove = 17 myArray.remove(object: objectToRemove) // [4, 8, 6, 2]
Поделиться 10 июля 2017 в 09:12
Начиная с Xcode 10+, и согласно сессии WWDC 2018 223, «Обращение алгоритмов», хорошим методом в будущем будет mutating func removeAll(где предикат: (Element) throws -> Bool) rethrows
var phrase = "The rain in Spain stays mainly in the plain." let vowels: Set = ["a", "e", "i", "o", "u"] phrase.removeAll(where: < vowels.contains($0) >) // phrase == "Th rn n Spn stys mnly n th pln."
Таким образом, в примере ОП удаление животных[2], «chimps»:
var animals = ["cats", "dogs", "chimps", "moose"] animals.removeAll(where: < $0 == "chimps" >) // or animals.removeAll
Этот метод может быть предпочтительным, потому что он хорошо масштабируется (линейный против квадратичного), читаем и чистым. Имейте в виду, что он работает только в Xcode 10+, и на момент написания это находится в бете.
Поделиться 19 июня 2018 в 19:10
list = list.filter
Поделиться 04 января 2018 в 09:55
Если у вас есть массив пользовательских объектов, вы можете искать по определенному свойству, как показано ниже:
if let index = doctorsInArea.firstIndex(where: )
или, если вы хотите искать по имени, например
if let index = doctorsInArea.firstIndex(where: )
Поделиться 18 января 2017 в 08:57
Вы можете сделать это. Сначала убедитесь, что Dog действительно существует в массиве, а затем удалите его. Добавьте оператор for , если вы считаете, что Dog может произойти более одного раза в вашем массиве.
var animals = ["Dog", "Cat", "Mouse", "Dog"] let animalToRemove = "Dog" for object in animals < if object == animalToRemove < animals.remove(at: animals.firstIndex(of: animalToRemove)!) >>
Если вы уверены, что Dog выходит из массива и произошел только один раз, просто сделайте это:
animals.remove(at: animals.firstIndex(of: animalToRemove)!)
Если у вас есть и строки, и числа
var array = [12, 23, "Dog", 78, 23] let numberToRemove = 23 let animalToRemove = "Dog" for object in array < if object is Int < // this will deal with integer. You can change to Float, Bool, etc. if object == numberToRemove < array.remove(at: array.firstIndex(of: numberToRemove)!) >> if object is String < // this will deal with strings if object == animalToRemove < array.remove(at: array.firstIndex(of: animalToRemove)!) >> >
Поделиться 05 июня 2016 в 20:26
Если вы не знаете индекс элемента, который хотите удалить, и элемент соответствует протоколу Equatable, вы можете сделать следующее:
animals.remove(at: animals.firstIndex(of: "dogs")!)
Поделиться 04 мая 2016 в 04:10
Несколько операций связаны с массивом в Swift
var stringArray = ["One", "Two", "Three", "Four"]
Добавить объект в массив
stringArray = stringArray + ["Five"]
Получить значение из объекта Index
let x = stringArray[1]
stringArray.append("At last position")
Вставить объект в Index
stringArray.insert("Going", at: 1)
stringArray.remove(at: 3)
Сопоставить значение объекта
var string = "Concate Two object of Array \(stringArray[1]) + \(stringArray[2])"
Поделиться 15 октября 2014 в 09:52
Удалить элементы с помощью массива индексов:
-
Массив строк и индексов
let animals = ["cats", "dogs", "chimps", "moose", "squarrel", "cow"] let indexAnimals = [0, 3, 4] let arrayRemainingAnimals = animals .enumerated() .filter < !indexAnimals.contains($0.offset) >.map < $0.element >print(arrayRemainingAnimals) //result - ["dogs", "chimps", "cow"]
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] let indexesToRemove = [3, 5, 8, 12] numbers = numbers .enumerated() .filter < !indexesToRemove.contains($0.offset) >.map < $0.element >print(numbers) //result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
Удалить элементы с помощью значения элемента другого массива
-
Массивы целых чисел
let arrayResult = numbers.filter < element in return !indexesToRemove.contains(element) >print(arrayResult) //result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
let arrayLetters = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] let arrayRemoveLetters = ["a", "e", "g", "h"] let arrayRemainingLetters = arrayLetters.filter < !arrayRemoveLetters.contains($0) >print(arrayRemainingLetters) //result - ["b", "c", "d", "f", "i"]
Поделиться 02 августа 2017 в 18:00
Я придумал следующее расширение, которое занимается удалением элементов из Array , предполагая, что элементы в Array реализуют Equatable :
extension Array where Element: Equatable < mutating func removeEqualItems(_ item: Element) < self = self.filter < (currentItem: Element) ->Bool in return currentItem != item > > mutating func removeFirstEqualItem(_ item: Element) < guard var currentItem = self.first else < return >var index = 0 while currentItem != item < index += 1 currentItem = self[index] >self.remove(at: index) > >
Использование:
var test1 = [1, 2, 1, 2] test1.removeEqualItems(2) // [1, 1] var test2 = [1, 2, 1, 2] test2.removeFirstEqualItem(2) // [1, 1, 2]
Поделиться 03 августа 2016 в 16:09
Относительно альтернативы @Suragch в «Удаление элемента неизвестного индекса»:
Существует более мощная версия «indexOf(элемента), который будет совпадать на предикате вместо самого объекта. Он имеет то же имя, но называется myObjects.indexOf. Он возвращает индекс первого совпадающего элемента, найденного в массиве myObjects.
Если элемент является объектом/структурой, вы можете захотеть удалить этот элемент на основе значения одного из его свойств. Например, у вас есть класс Car с свойством car.color, и вы хотите удалить «красный» автомобиль из вашего массива cars.
if let validIndex = (carsArray.indexOf)
Ожидается, вы можете переделать это, чтобы удалить «все» красные автомобили, встроив вышеуказанное выражение if в цикл repeat/while и прикрепив блок else, чтобы установить флаг для «разрыва» из цикла.
Поделиться 24 августа 2016 в 19:26
Swift 5
guard let index = orders.firstIndex(of: videoID) else < return >orders.remove(at: index)
Поделиться 24 октября 2019 в 06:51
Это должно сделать это (не протестировано):
animals[2. 3] = []
Редактировать: и вам нужно сделать это var , а не let , иначе это неизменяемая константа.
Поделиться 05 июня 2014 в 04:30
Чтобы удалить элементы из массива, используйте remove(at:) , removeLast() и removeAll() .
yourArray = [1,2,3,4]
Удалите значение на 2 позиции
yourArray.remove(at: 2)
Удалите последнее значение из массива
yourArray.removeLast()
Удаляет все члены из набора
yourArray.removeAll()
Поделиться 14 ноября 2019 в 09:11
расширение для удаления объекта String
extension Array < mutating func delete(element: String) < self = self.filter() < $0 as! String != element >> >
Поделиться 11 апреля 2017 в 08:46
Я использую это расширение, почти то же самое, что и в Varun, но это (ниже) является универсальным:
extension Array where Element: Equatable < mutating func delete(element: Iterator.Element) < self = self.filter> >
Swift: удалить все элементы массива
@NoodleOfDeath Строго говоря, массивы Swift являются struct и структуры имеют functions отличие от классов, которые имеют methods .
vadian 10 июль 2016, в 18:13
@vadian +1 для разъяснения. Я забыл, что Array s это struct s. Ветеран Objective-C кодер здесь .
NoodleOfDeath 10 июль 2016, в 18:16
Вам нужно вызывать функцию removeAll () при выходе из представления (viewcontroller), где вы его инициализируете, или оно само исчезает !?
Famic Tech 31 май 2017, в 20:37
@FamicTech Это зависит: если представление выгружено, оно исчезает неявно, если представление только исчезает, вы должны вызвать removeAll() . Однако это хорошая практика (дисциплина памяти), чтобы удалить все ненужные данные, когда представление исчезает.
vadian 13 июнь 2017, в 11:59
Показать ещё 5 комментариев
Принимая во внимание, что ответ @vadian — это решение, я просто хочу указать, что ваш код не работает.
Прежде всего, индексы массива основаны на 0, поэтому вы должны переписать диапазон соответственно:
for index 0..
Однако эта реализация приведет к сбою. Если у вас есть массив из 10 элементов, последний элемент занимает позицию в индексе 9.
Используя этот цикл, на первой итерации элемент с индексом 0 удаляется, и это приводит к тому, что последний элемент сдвигается вниз по индексу 8.
На следующей итерации элемент в индексе 1 удаляется, а последний элемент сдвигается вниз по индексу 7. И так далее.
В какой-то момент цикла попытка удалить элемент для не существующего индекса приведет к сбою приложения.
При удалении элементов из массива в цикле наилучший способ сделать это — переместить его в обратном порядке:
for index in reverse(0..
Это гарантирует, что удаленные элементы не изменят порядок или индекс элементов, которые еще предстоит обработать.
Как удалить элемент из массива swift
Массив представляет упорядоченную коллекцию элементов одного типа, к которым можно обратиться по индексу — номеру элемента в массиве. Индекс представляет число — объект типа Int и начинается с нуля. По сути массив представляет собой обычную переменную или константу, которая хранит несколько объектов наподобие кортежа.
Объявление массива
Объявление массива имеет следующие формы записи:
// Полная форма var имяМассива: Array // Краткая форма var имяМассива: [Тип]
var numbers: [Int]
Здесь объявлен массив numbers, который хранит объекты типа Int .
Но просто объявить массив недостаточно. Его, как и любую другую переменную, надо инициализировать перед использованием. То есть определить для него начальное значение. Все значения, которые входят в массив, перечисляются в квадратных скобках: [элемент1, элемент2, элемент3, . ] . Например:
var numbers: [Int] = [1, 2, 3, 4, 5] var numbers2: Array = [1, 2, 3, 4, 5] print(numbers)
Здесь массивы numbers и numbers2 содержит по 5 элементов. Мы также можем при объявлении не указывать тип массива, в этом случае система сама выведет тип исходя из входящих в него элементов:
var numbers = [1, 2, 3, 4, 5]
Мы также можем определить пустой массив:
var numbers = [Int]() // или так var numbers2 : [Int] = [] print("В массиве numbers \(numbers.count) элементов") // В массиве numbers 0 элементов
В таком массиве будет 0 элементов. С помощью свойства count можно получить количество элементов в массиве.
Доступ к элементам массива
Каждый элемент в массиве имеет определенный индекс, по которому мы можем получить или изменить элемент:
var numbers = [11, 12, 13, 14, 15] print(numbers[0]) // 11 numbers[0] = 21 print(numbers[0]) // 21
Для обращения к элементу массива после названия массива в квадратных скобках используется индекс элемента: numbers[0]
В данном случае у нас пять элементов в массиве, индексация в массивах начинается с нуля, поэтому первый элемент всегда имеет индекс 0, а последний элемент в данном случае будет иметь индекс 4. Если же мы попытаемся обратиться к элементу с большим индексом, например:
print(numbers[5]) // ошибка
То мы получим ошибку.
Если нам надо изменить несколько элементов подряд, то мы можем использовать операцию последовательности для записи индексов:
var numbers = [5, 6, 7, 8, 3] numbers[1. 3] = [105, 106, 103] print(numbers) // 5, 105, 106, 103, 3
В данном случае выражение 1. 3 указывает на набор индексов от 1 до 3. И таким образом, элементам с этими индексами мы можем присвоить значения.
Размер массива
С помощью свойства count можно получить число элементов массива:
var numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8] print("В массиве numbers \(numbers.count) элементов") // В массиве numbers 8 элементов
В дополнение к нему свойство isEmpty позволяет узнать, пуст ли массив. Если он пуст, то возвращается значение true :
var numbers: [Int] = [1, 4, 8] if numbers.isEmpty < print("массив пуст") >else
Перебор массива
С помощью цикла for можно перебрать элементы массива:
var numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8] for i in numbers < print(i) // 1, 2, 3, 4, 5, 6, 7, 8, >
Перебор массива через индексы:
var numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8] for i in 0 .. < numbers.count < print(numbers[i]) // 1, 2, 3, 4, 5, 6, 7, 8, >
Вместо применения цикла также можно использовать метод forEach() , которые перебирает все элементы. В качестве параметра этот метод принимает функцию, которая производит действия над текущим перебираемым элементом:
var numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8] numbers.forEach()
В данном случае передается анонимная функция, которая также с помощью функции print выводит значение элемента.
С помощью метода enumerated() можно одновременно получить индекс и значение элемента:
var names: [String] = [«Tom», «Alice», «Kate»] names.enumerated().forEach() for (index, value) in names.enumerated()
Создание массива из последовательности
Специальная форма инициализатора в качестве параметра принимает последовательность, из которой создается массив:
var numbers = Array (1. 5) // [1, 2, 3, 4, 5] var numbers2 = [Int] (3..<7) // [3, 4, 5, 6] print(numbers) // [1, 2, 3, 4, 5] print(numbers2) // [3, 4, 5, 6]
Еще одна форма инициализатора позволяет инициализировать массив определенным числом элементов одного значения:
var numbers = [Int] (repeating: 5, count: 3) // или так var numbers2 = Array (repeating: 5, count: 3) // эквивалентно массиву var numbers: [Int] = [5, 5, 5] print(numbers) // [5, 5, 5]
Однако стоит учитывать, что если подобным образом создается массив из объектов классов - ссылочных типов, то все элементы массива будут хранить ссылку на один и тот же элемент в памяти:
class Person < var name: String init(name: String)< self.name = name >> let tom = Person(name: "Tom") var people = Array (repeating: tom, count: 3) people[0].name = "Bob" for person in people < print(person.name) >// Bob // Bob // Bob
Сравнение массивов
Два массива считаются равными, если они содержат одинаковые элементы на соответствующих позициях:
var numbers: [Int] = [1, 2, 3, 4, 5] let nums = [1, 2, 3, 4, 5] if numbers == nums < print("массивы равны") >else
В данном случае массивы numbers и nums имеют одинаковое количество элементов, и все элементы на соответствующих позициях равны, поэтому оба массива равны.
Копирование массива
Массив является значимым типом, поэтому при копировании одного массива в другой второй массив получает копию первого:
var numbers: [Int] = [1, 2, 3, 4, 5] var nums: [Int] = numbers nums[0] = 78 print(numbers) // [1, 2, 3, 4, 5] print(nums) // [78, 2, 3, 4, 5]
С помощью последовательности можно задать набор индексов, по которым элементы копируются в другой массив:
var numbers: [Int] = [1, 2, 3, 4, 5] var nums = numbers[1. 3] print(nums[1]) // 2 print(nums) // [2, 3, 4]
В данном случае в массив nums копируются элементы из numbers с 1 по 3 индексы. При этом первым индексом в массиве nums будет не 0, а 1, так как именно с этого индекса производится копирование из numbers.
Добавление в массив
Для добавления элемента в массив применяется метод append() :
var numbers = [8, 11, 13, 14] numbers.append(20) print(numbers) // 8, 11, 13, 14, 20
Другой метод insert() управляет вставкой элемента в определенное место массива:
var numbers = [8, 11, 13, 14] numbers.insert(10, at: 3) // вставка числа 10 на 3-й индекс print(numbers) // 8, 11, 13, 10, 14
Удаление из массива
Ряд операций позволяют удалять элемент:
- remove(at: index) : удаляет элемент по определенному индексу
- removeFirst() : удаляет первый элемент
- removeLast() : удаляет последний элемент
- dropFirst() : удаляет первый элемент
- dropLast() : удаляет последний элемент
- removeAll() : удаляет все элементы массива
var numbers = [8, 11, 13, 14] numbers.remove(at: 2) // удаляем 3-й элемент print(numbers) // 8, 11, 14
Разница между методами removeFirst/removeLast и dropFirst/dropLast заключается в том, что первые возвращают удаленный элемент, а вторые - модифицированный массив:
var numbers = [8, 11, 13, 14] var n = numbers.removeFirst() // 8 var subNumbers = numbers.dropFirst() print(subNumbers) // [13, 14]
И если из массива необходимо удалить все элементы, применяется метод removeAll() :
var numbers = [8, 11, 13, 14] numbers.removeAll() print(numbers) // []
Сортировка массива
Для сортировки массива применяется метод sort
var numbers: [Int] = [10, 4, 12, 1, 3] numbers.sort() print(numbers) // [1, 3, 4, 10, 12]
Если метод sort сортирует оригинальный массив, то метод sorted() возвращает новый отсортированный массив, никак не изменяя старый:
var numbers: [Int] = [10, 4, 12, 1, 3] var nums = numbers.sorted() print(nums) // [1, 3, 4, 10, 12]
Обе функции принимают параметр by , который задает принцип сортировки. Он представляет функцию, которая принимает два параметра. Оба параметра представляют тип элементов массива. На выходе функция возвращает объект Bool. Если это значение равно true, то первое значение ставится до второго, если false - то после.
var numbers: [Int] = [10, 4, 12, 1, 3] numbers.sort(by: $1>) print(numbers) // [12, 10, 4, 3, 1] var nums = numbers.sorted(by: <) print(nums) // [1, 3, 4, 10, 12]
Выражение $1> представляет анонимную функцию, которая возвращает true, если значение первого параметра меньше второго, то есть в данном случае сортировка в обратном порядке. Мы можем задать более сложную логику, но в данном случае мы просто сравниваем два значения, поэтому мы можем упрастить данный вызов: numbers.sort(by: >) и Swift опять же будет применять операцию > к обоим параметрам.
Объединение массивов
С помощью операции сложения можно объединить два однотипных массива:
var numbers1 = [5, 6, 7] var numbers2 = [1, 2, 3] var numbers3 = numbers1 + numbers2 print(numbers3) // 5, 6, 7, 1, 2, 3
Фильтрация массивов
Для фильтрации массива применяется метод filter() , который возвращает отфильтрованный массив. В качестве параметра метод принимает функцию - если перебирает все эелементы и возвращает значение типа Bool. Если это значение - true, то элемент попадает в отфильтрованный массив:
var numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8] var filteredNums = numbers.filter() print(filteredNums) // [2, 4, 6, 8]
В данном случае метод filter принимает анонимную функцию, которая возвращает результат условия $0 % 2==0 , то есть если число делится на 2 без остатка (четное), то оно попадает в отфильтрованный массив.
Еще один способ фильтрации представляет метод prefix() . Он также возвращает отфильтрованный массив, при этом он перебирает подряд все элементы, пока условие возвращает true. Условие задается с помощью параметра while, который представляет функцию, возвращающую значение Bool:
var numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8] var filteredNums = numbers.prefix(while: ) print(filteredNums) // [1, 2, 3, 4]
Противоположным образом работает метод drop() - он, наоборт, удаляет все элементы до того, пока они не станут соответствовать условию:
var numbers: [Int] = [1, 2, 5, 3, 4, 5, 6, 7, 8] var filteredNums = numbers.drop(while: ) print(filteredNums) // [5, 3, 4, 5, 6, 7, 8]
Причем удаляются именно первые элементы, пока не найдется элемент, который удовлетворяет условию.
Преобразование массива
Метод map() проходит по всем элементам массива и преобразует их с помощью функции, которая передается в качестве параметра и которая возвращает преобразованный элемент. Преобразованные элементы помещаются в новый массив, который возвращается методом map:
var numbers: [Int] = [1, 2, 5, 3, 4, 5, 6, 7, 8] var mapedNums = numbers.map() print(mapedNums) // [1, 4, 25, 9, 16, 25, 36, 49, 64]
В данном случае метод map принимает анонимную функцию, которая возвращает квадрат числа. В итоге созданный массив будет содержать квадраты чисел из оригинального массива.
Многомерные массивы
Выше мы использовали простые массивы, которые можно представить в виду строки или расположить в ряд:
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Но мы можем создавать более сложные массивы, которые в качестве элементов могут включать в себя другие массивы:
var table = [[1,2,3], [4,5,6], [7,8,9]] // получаем вторую строку var row2 = table[1] // [4,5,6] // получаем первый элемент второй строки var cell1 = row2[0] // 4 // получаем второй элемент первой строки var cell2 = table[0][1] // 2
Внутри массива у нас три подмассива. Фактически данный массив можно представить как таблицу, в которой 3 строки. Выражение table[1] позволяет получить второй элемент - второй подмассив. А выражение row2[0] возвращает первый элемент этого подмассива.
Либо мы можем использовать набор квадратных скобок для доступа к элементам внутри подмассивов: table[0][1]
Подобным образом можно изменять элементы массива
// изменим вторую строку table[1] = [16, 25, 36] // изменим второй элемент первой строки table[0][1] = -12
При переборе стоит учитывать, что поскольку каждый элемент многомерного массива сам является массивом, то мы можем организовать вложенные циклы для их перебора:
// перебор по строкам for row in table < print(row) >// перебор таблицы по строкам и столбцам for row in table < for cell in row< print(cell) >>