したがって、Cループはswift 2.2で廃止され、swift 3では削除されます。配列がswift 2.2以上でnilである場合のCループの置換
私は以下のような機能を持っていた:
func levelOrder(root: TreeNode?) -> [[Int]] {
guard root != nil else { return [] }
let leftArr = levelOrder(root!.left)
let rightArr = levelOrder(root!.right)
var merged = [[Int]]()
merged.append([root!.val])
for i in 0...max(leftArr.count, rightArr.count)
{
var current = [Int]()
let currentLeft: [Int]? = i < leftArr.count ? leftArr[i] : nil
let currentRight: [Int]? = i < rightArr.count ? rightArr[i] : nil
for var j = 0; j < currentLeft?.count; j++
{
current.append(currentLeft![j])
}
for var j = 0; j < currentRight?.count; j++
{
current.append(currentRight![j])
}
if current.count > 0
{
merged.append(current)
}
}
return merged
}
私はCスタイルのループを使用していますので、ループの内側のために、currentLeft
がnilであれば、ループのすべてで実行されることはありません飽きないだろうということ完璧です、コードはきれいでエレガントです。
ここで問題になるのは、スイープループを使用するには、if条件を使用して配列がnilかどうかを確認する必要があります。これは迷惑です。私のような条件を導入しなくてもCループを置き換える良い解決策はありますか?
Sulthanの回答がコードを改善するはずですが、直接答えは: 'currentLeft?.forEach {current.append($ 0)}'です。それが 'nil'の場合、何も起こりません。 – Eendje
@Eendjeはあなたが正しいようです。 – Wingzero