【发布时间】:2021-01-12 04:45:02
【问题描述】:
我有一个二维数组,我正在尝试检查索引是否有效。
下面是我的代码,它按预期工作。
我很想知道这是否是正确的解决方案?我确信应该有一个非常简洁的解决方案,而不是我所做的。请指教
fileprivate func isValid(index1: Int, index2: Int) -> Bool {
return myArray?.indices.contains(index1) ?? false && myArray?[index1].indices.contains(index2) ?? false
}
【问题讨论】:
-
您为什么不为其编写一些测试,并以一种不仅可以验证您今天的工作,还可以自动检查它在未来更改后是否保持正确的方式进行检查?
-
如果您将
myArray设为非可选,您将大大简化此操作。 “空数组”和“无数组”在您的系统中是否存在实际差异?如果没有,那么只需使用[]而不是 nil。永远记住,[[]]不是二维数组。它是一个数组数组。如果你想构建一个二维数组,那么你需要在一个简单的数组之上构建它,并使用乘法和加法来访问它。 -
不确定
contains在这种情况下有多快,但一种选择是index1 >= 0 && index1 < myArray.count等等 -
@LeoDabus 这表明即使是非常简单和明显的属性也值得阅读文档,谢谢。
-
@JoakimDanielson
(1...10).contains(5)将产生与1 <= 5 && 5 <= 10完全相同的机器代码,而不会混淆<、>、<=、>=、&&和||。我通常建议人们专门将其用于 int 范围检查,手动滚动相同的定义,使其更长/更混乱,并且通常会出现 off-by-1 错误
标签: ios arrays swift multidimensional-array