在 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 中将一列值插入到二维数组中的主要内容,如果未能解决你的问题,请参考以下文章