如何通过数组乘法定义递归元素?

时间:2019-02-25 10:51:59

标签: swift

我创建了Array类的扩展,如果其元素可复制,则可以将两个数组相乘。还可以让一个元素乘以这些元素的数组。

protocol Multiplicable {
    static func * (lhs: Self, rhs: Self) -> Self
}

extension Array: Multiplicable where Element: Multiplicable {
    static func * (lhs: Array, rhs: Array) -> Array {
        return zip(lhs, rhs).map { $0 * $1 }
    }

    static func * (lhs: Element, rhs: Array) -> Array {
        return rhs.map { lhs * $0 }
    }

    static func * (lhs: Array, rhs: Element) -> Array {
        return rhs * lhs
    }
}

但是,如果数组包含“某物”的数组,则它仍应与“某物”相乘。

extension Int: Multiplicable {}

let V = [[1, 2, 3], [4, 5, 6]]
let A = 3 * V

let W = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
let B = 5 * W

我希望A为[[3, 6, 9], [12, 15, 18]],B为[[[5, 10], [15, 20]], [[25, 30], [35, 40]]]。如何在不显式定义*Element * Array<Array<Element>>等的情况下使Element * Array<Array<Array<Element>>>运算符像这样(递归)工作?

0 个答案:

没有答案