【问题标题】:How to create a variant model using multiple arrays如何使用多个数组创建变体模型
【发布时间】:2020-10-26 21:12:45
【问题描述】:
    *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.

我想使用上面的数组创建一个表,并有一些类似于图像的东西。

[

【问题讨论】:

  • 所以你想创建一个所有数组的数据结构(笛卡尔积)?这可能会在规模上迅速增长,因此“即时”计算可能会更好。
  • 我认为您正在寻找某种sort。由于您所说的原因,数组不是好的结构。

标签: ios arrays swift e-commerce


【解决方案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)
    }
    

    这将打印:

    [“小”、“绿”、“木”]
    [“小”、“绿”、“玻璃”]
    [“小”、“绿色”、“塑料”]
    [“小”、“蓝”、“木”]
    [“小”、“蓝”、“玻璃”]
    [“小”、“蓝”、“塑料”]
    [“小”、“红”、“木”]
    [“小”、“红”、“玻璃”]
    [“小”、“红”、“塑料”]
    [“中”、“绿”、“木”]
    [“中”、“绿色”、“玻璃”]
    [“中”、“绿色”、“塑料”]
    [“中”、“蓝”、“木”]
    [“中”、“蓝色”、“玻璃”]
    [“中”、“蓝色”、“塑料”]
    [“中”、“红”、“木”]
    [“中”、“红”、“玻璃”]
    [“中”、“红色”、“塑料”]
    [“大”、“绿”、“木”]
    [“大”、“绿色”、“玻璃”]
    [“大”、“绿色”、“塑料”]
    [“大”、“蓝”、“木”]
    [“大”、“蓝色”、“玻璃”]
    [“大”、“蓝色”、“塑料”]
    [“大”、“红”、“木”]
    [“大”、“红”、“玻璃”]
    [“大”、“红色”、“塑料”]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      相关资源
      最近更新 更多