Arrays Swift-通过数组[[Int]]循环的智能方式
我使用数组[[Int]]的数组在地图中存储坐标。 例如,我想用“1”替换所有“2”。 为此,我创建了2个For循环,用于定义数组空间并检查内容。 这不是很灵活,只适用于定义大小的数组Arrays Swift-通过数组[[Int]]循环的智能方式,arrays,swift,loops,Arrays,Swift,Loops,我使用数组[[Int]]的数组在地图中存储坐标。 例如,我想用“1”替换所有“2”。 为此,我创建了2个For循环,用于定义数组空间并检查内容。 这不是很灵活,只适用于定义大小的数组 private func remove2fromArray(currentArray: [[Int]]) -> [[Int]] { var newArray : [[Int]] = currentArray for section in 0...14 { for row i
private func remove2fromArray(currentArray: [[Int]]) -> [[Int]] {
var newArray : [[Int]] = currentArray
for section in 0...14 {
for row in 0...19 {
if newArray[section][row] == 2
{ newArray[section][row] = 1 }
}
}
return newArray
}
有没有办法只扫描数组的内容来替换数字
e、 g。
currentArray.findAndReplace(find:2,replace:1)或类似的,与[[Int]]一起工作的?您可以这样做:
let result = array.map { subarray in
subarray.map { integer -> Int in
if integer == 2 {
return 1
} else {
return integer
}
}
}
甚至更短:
let result = array.map {
$0.map { integer in
return integer == 2 ? 1 : integer
}
}
和一艘班轮:
let result = array.map { $0.map { $0 == 2 ? 1 : $0 } }
我将试着用简单的话来解释这里发生的事情:map的作用是它一个接一个地遍历数组元素,并在元素上应用函数
在我们的示例中,第一个映射迭代外部数组元素,因此这里的$0
引用内部数组(一个接一个)
第二个映射迭代内部数组的元素。因此,内部映射中的
$0
引用内部数组元素的每个元素。至少删除那些硬编码的范围。根据数组的实际大小创建循环。为什么要使用2d数组来存储坐标?这里的模型是什么?有一个坐标结构并只存储它们的平面数组不是更好吗?数组是“一个有序的随机访问集合”。对我来说,这听起来不像坐标。您最好创建一个更适合坐标的数据类型。它工作得非常好,因为我可以访问数组[section][row],我认为它定义了二维空间坐标。你的意思是:struct{x:Int;y:Int;value:Int}如果你能解释一下如何替换卡片编码的范围,这会很有帮助,因为我无法在数组中使用数组的计数。但我可能可以用下面的map函数来实现这一点。我想我需要通读一下手册,看看.map到底做了什么,或者你能解释一下各个参数吗?map返回一个数组,其中单个内容由$0表示,并由后面的函数修改。在哪里可以了解带“?”和“:”的短函数?我更新了我的答案来解释发生了什么。如果你需要更多的解释,请让我知道。谢谢!