Я знаю, что несколько опоздал с ответом, но, надеюсь, кто-то найдет его полезным.
Вы не можете удалить строки из данной таблицы на месте, но вы можете создать новую таблицу с отфильтрованными строками.
Вот пример таблицы:
let employeesDict: [String: MLDataValueConvertible] = [
"First Name": ["Alice", "Bob", "Charlie", "Dave", "Eva"],
"Years of experience": [10, 1, 8, 5, 3],
"Gender": ["female", "male", "male", "male", "female"],
]
let employeesTable = try! MLDataTable(dictionary: employeesDict)
Фильтрация достигается путем передачи экземпляра MLDataColumn<Bool>
в оператор индекса таблицы. Apple называет это «маской строки».
Вот маска строки для фильтрации женских экземпляров, созданных вручную:
let maleEmployeesMaskByHand = MLDataColumn([false, true, true, true, false])
Передача его в качестве аргумента в оператор индекса employeesTable
приводит к следующей таблице:
let maleEmployeesTable = employeesTable[maleEmployeesMaskByHand]
print(maleEmployeesTable)
+----------------+----------------+---------------------+
| Gender | First Name | Years of experience |
+----------------+----------------+---------------------+
| male | Bob | 1 |
| male | Charlie | 8 |
| male | Dave | 5 |
+----------------+----------------+---------------------+
Вот еще один способ создать ту же маску строки:
let genderColumn: MLDataColumn<String> = employeesTable["Gender"]
let maleEmployeesMask = genderColumn != "female"
print(employeesTable[maleEmployeesMask])
Сначала извлекается нужный столбец, а затем - благодаря перегрузке оператора - строится маска строки, применяя оператор !=
ко всему столбцу.
Вот способ добиться того же в одной строке:
print(employeesTable[ employeesTable["Gender"] != "female" ])
Ссылка на соответствующую документацию: https://developer.apple.com/documentation/createml/mldatatable/3006094-subscript