++ post-增量运算符的替代方案?
Alternatives to the ++ post-increment operator?
我想在不使用 Swift 中的遗留 ++ 的情况下重构此合并排序。
当使用实例方法和多个级别在更复杂的语句中使用一元运算符时,我在逻辑上遇到了麻烦。
您不能简单地将 ++
切换为 +=1
,因为您会收到 Cannot subscript a value of type '[Int]' with an index of type '()'
错误。
那么我应该创建一个新的可变副本变量然后递增该变量吗?即使没有错误检查,我也可以使用 guard 重构这个块吗?毫无意义?
if (hidariCount < hidari.count && (migiCount >= migi.count || hidari[hidariCount] <= migi[migiCount])) {
sortedArray.append(hidari[hidariCount++])
} else if (migiCount < migi.count && (hidariCount >= hidari.count || migi[migiCount] < hidari[hidariCount])) {
sortedArray.append(migi[migiCount++])
}
post-增量运算符有什么作用?
此代码
hidari[hidariCount++]
按以下顺序做 2 件事:
hidariCount
的当前值 用于 访问hidary
数组
hidariCount
增加 1
解决方案
所以你可以通过替换这个来重构你的代码
sortedArray.append(hidari[hidariCount++])
有了这个
sortedArray.append(hidari[hidariCount])
hidariCount += 1
并且不要忘记在 else
分支中执行相同的操作。
如果你真的很想念它们,你可以简单地在
中重新定义它们
postfix operator ++ // i++
postfix func ++ ( left: inout Int) -> Int {
defer {left += 1}
return left
}
postfix operator -- // i--
postfix func -- ( left: inout Int) -> Int {
defer {left -= 1}
return left
}
prefix operator ++ // ++i
prefix func ++ ( right: inout Int) -> Int {
right += 1
return right
}
prefix operator -- // --i
prefix func -- ( right: inout Int) -> Int {
right -= 1
return right
}
虽然这不是真正可取的!
我想在不使用 Swift 中的遗留 ++ 的情况下重构此合并排序。
当使用实例方法和多个级别在更复杂的语句中使用一元运算符时,我在逻辑上遇到了麻烦。
您不能简单地将 ++
切换为 +=1
,因为您会收到 Cannot subscript a value of type '[Int]' with an index of type '()'
错误。
那么我应该创建一个新的可变副本变量然后递增该变量吗?即使没有错误检查,我也可以使用 guard 重构这个块吗?毫无意义?
if (hidariCount < hidari.count && (migiCount >= migi.count || hidari[hidariCount] <= migi[migiCount])) {
sortedArray.append(hidari[hidariCount++])
} else if (migiCount < migi.count && (hidariCount >= hidari.count || migi[migiCount] < hidari[hidariCount])) {
sortedArray.append(migi[migiCount++])
}
post-增量运算符有什么作用?
此代码
hidari[hidariCount++]
按以下顺序做 2 件事:
hidariCount
的当前值 用于 访问hidary
数组hidariCount
增加1
解决方案
所以你可以通过替换这个来重构你的代码
sortedArray.append(hidari[hidariCount++])
有了这个
sortedArray.append(hidari[hidariCount])
hidariCount += 1
并且不要忘记在 else
分支中执行相同的操作。
如果你真的很想念它们,你可以简单地在
中重新定义它们postfix operator ++ // i++
postfix func ++ ( left: inout Int) -> Int {
defer {left += 1}
return left
}
postfix operator -- // i--
postfix func -- ( left: inout Int) -> Int {
defer {left -= 1}
return left
}
prefix operator ++ // ++i
prefix func ++ ( right: inout Int) -> Int {
right += 1
return right
}
prefix operator -- // --i
prefix func -- ( right: inout Int) -> Int {
right -= 1
return right
}
虽然这不是真正可取的!