在 Swift 中将一列值插入到二维数组中

Posted

技术标签:

【中文标题】在 Swift 中将一列值插入到二维数组中【英文标题】:Inserting a column of values into a 2D Array in Swift 【发布时间】:2021-05-06 23:28:35 【问题描述】:

我正在尝试编写一个数组扩展来将一列值插入到二维数组中。问题是我无法使用 self[index].insert(element, at) 并且不知道为什么。这是我到目前为止所拥有的

extension Array where Element: Collection 
 
    mutating func insert(_ elements: Element, column: Int)
        for (index, element) in elements.enumerated() 
            self[index] // cannot do self[index].insert....
        

    

这就是我要找的东西:

假设我有一个 Ints 的二维数组(我可以有 Double、String、... 任何类型)

var data = [[11, 12, 13, 14, 15],
            [21, 22, 23, 24, 25],
            [31, 32, 33, 34, 35],
            [41, 42, 43, 44, 45],
            [51, 52, 53, 54, 55],
            [61, 62, 63, 64,65]]

我希望能够打电话

data.insert([10, 20, 30, 40, 50, 60], column: 0)

预期的结果是:

[[10, 11, 12, 13, 14, 15],
            [20, 21, 22, 23, 24, 25],
            [30, 31, 32, 33, 34, 35],
            [40, 41, 42, 43, 44, 45],
            [50, 51, 52, 53, 54, 55],
            [60, 61, 62, 63, 64,65]]

感谢任何帮助!

【问题讨论】:

您的元组解构会向后获取参数。 developer.apple.com/documentation/swift/array/… @Jessy - 好的,我明白了,我切换元组是个错误。但它仍然不起作用。你有没有尝试过?我认为你不应该对一个简单的疏忽投反对票 在您的扩展中 self 是不可变的 @matt 答案使用 var @AnderCover 你所说的self 是什么意思是不可变的? OP 正在扩展数组,不可变的是数组元素(集合) @leo-dabus 是的,我的错,你完全正确,这就是我的意思 【参考方案1】:

您需要将数组的 Element 限制为 RangeReplaceableCollection 并确保其索引与数组索引的类型相同:


extension Array where Element: RangeReplaceableCollection, Element.Index == Index 
    mutating func insert(_ elements: Element, column: Index) 
        for index in indices 
            self[index].insert(elements[index], at: column)
        
    


var data = [[11, 12, 13, 14, 15],
            [21, 22, 23, 24, 25],
            [31, 32, 33, 34, 35],
            [41, 42, 43, 44, 45],
            [51, 52, 53, 54, 55],
            [61, 62, 63, 64, 65]]

let colData = [10, 20, 30, 40, 50, 60]
data.insert(colData, column: 0)
print(data)

这将打印出来

[[10, 11, 12, 13, 14, 15], [20, 21, 22, 23, 24, 25], [30, 31, 32, 33, 34, 35], [40, 41 , 42, 43, 44, 45], [50, 51, 52, 53, 54, 55], [60, 61, 62, 63, 64, 65]]


如果您想附加一列,请对此进行扩展:

mutating func appendColumn(_ elements: Element) 
    for index in indices 
        self[index].insert(elements[index], at: self[index].endIndex)
    
 

【讨论】:

完美。我错过了 RangeReplaceableCollection。谢谢!

以上是关于在 Swift 中将一列值插入到二维数组中的主要内容,如果未能解决你的问题,请参考以下文章

在numpy的二维数组中的特定位置插入一列?

如何按列值对二维数组进行排序?

在 Numpy Python 中将一维数组附加到二维数组

在 C/C++ 中将矩阵读取到二维数组

vba中怎么选取二维数组中的某一行或某一列?

如何在python中将二维数组添加到数据库中