#ios #arrays #swift #e-commerce
#iOS #массивы #swift #электронная коммерция
Вопрос:
*From*
let size = ["Small", "Medium", "Large"]
let color = ["Green", "Blue", "Red"]
let mat = ["Wood", "Glass", "Plastic"]
*To*
let _ = ["Small", "Green", "Wood"]
let _ = ["Small", "Green", "Glass"]
let _ = ["Small", "Green", "Plastice"]
let _ = ["Small", "Blue", "Wood"]
let _ = ["Small", "Blue", "Glass"]
let _ = ["Small", "Blue", "Plastic"] and so on.
Я хотел бы создать таблицу с использованием приведенных выше массивов и иметь что-то похожее на изображение.
[
Комментарии:
1. Итак, вы хотите создать структуру данных (декартово произведение) всех массивов? Это может быстро увеличиваться в размерах, поэтому, возможно, было бы лучше просто вычислить его «на лету».
2. Я думаю, вы ищете какое-то
sort
вместо. Массивы не являются хорошей структурой по той причине, о которой вы говорите.
Ответ №1:
В качестве простого эксперимента вы можете определить вложенные циклы для построения этого вывода:
var combined = [[String]]()
for size in sizes {
for color in colors {
for material in materials {
combined.append([size, color, material])
}
}
}
НО!
Он может вырасти до огромного массива, а массивы не предназначены для таблиц такого типа. Вы должны. вместо этого рассмотрите возможность использования структуры, подобной простой структуре или даже словарю.
Например, взгляните на эту структуру:
struct Product: Codable {
let size: String
let color: String
let material: String
}
Таким образом, вы можете заполнить его предыдущим кодом, например:
var products = [Product]()
for size in sizes {
for color in colors {
for material in materials {
products.append(Product(size: size, color: color, material: material))
}
}
}
И будет ли у вас:
Теперь она доступна для поиска, расширения, сортировки, хранения и имеет множество других функций из коробки.
Ответ №2:
Или используйте общий подход с использованием более высоких функций:
extension Collection where Element: RangeReplaceableCollection {
func combinations() -> [Element] {
reduce([.init()]) { result, element in
result.flatMap { elements in
element.map { elements CollectionOfOne($0) }
}
}
}
}
Использование:
let combinations = [size,color,mat].combinations()
for combination in combinations {
print(combination)
}
Это выведет:
[«Маленький», «Зеленый», «Деревянный»]
[«Маленький», «Зеленый», «Стеклянный»]
[«Маленький», «Зеленый», «Пластиковый»]
[«Маленький», «Синий», «Деревянный»]
[«Маленький», «Синий», «Стекло»]
[«Маленький», «Синий», «Пластиковый»]
[«Маленький», «Красный», «Деревянный»]
[«Маленький», «Красный», «Стеклянный»]
[«Маленький», «Красный», «Пластиковый»]
[«Средний», «Зеленый», «Дерево»]
[«Средний», «Зеленый», «Стекло»]
[«Средний», «Зеленый», «Пластик»]
[«Средний», «Синий», «Дерево»]
[«Средний», «Синий», «Стекло»]
[«Средний», «Синий», «Пластиковый»]
[«Средний», «Красный», «Деревянный»]
[«Средний», «Красный», «Стеклянный»]
[«Средний», «Красный», «Пластиковый»]
[«Большой», «Зеленый «, «Дерево»]
[«Большой», «Зеленый», «Стеклянный»]
[«Большой», «Зеленый», «Пластиковый»]
[«Большой», «Синий», «Деревянный»]
[«Большой», «Синий», «Стеклянный»]
[«Большой», «Синий», «Пластиковый»]
[«Большой», «Красный», «Деревянный»]
[«Большой», «Красный», «Стеклянный»]
[«Большой», «Красный», «Пластиковый»]