Pythonのfor-else文をSwiftに書き換えようとしています。
python
1import itertools 2 3def getResult(ary, tgt, ptn): 4 result = [] 5 for n, _ in enumerate(ary, 1): 6 for c in itertools.combinations(ary, n): 7 if sum(c) == tgt: 8 if len(result) == ptn: break 9 result.append(list(c)) 10 else: continue # ←ココと 11 break # ココです
swift
1import Algorithms 2import Foundation 3 4func getResult(_ ary: [Float], _ tgt: Float, _ ptn: Int) { 5 var result: [[Float]] = [] 6 for n in 1 ... ary.count { 7 for c in ary.combinations(ofCount: n) { 8 if c.reduce(0, +) == tgt { 9 if result.count == ptn { break } 10 if result.contains(c) { continue } 11 result.append(contentsOf: [c]) 12 } 13 } 14 } 15 print(result) 16} 17getResult([1.0, 1.0, 1.1, 1.1, 1.2, 1.3, 1.3, 1.4, 1.5, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], 4.0, 20)
getResultの配列aryの要素一つから順に全ての要素を組み合わせて、その合計がtgtと一致するものをptn個出力させます。
上記のswiftのコードでも出力はされるのですが、pythonの"else: continue" "break"を書き換えられず、aryの要素を増やすとかなり遅くなってしまいます。
どのように書き換えたら良いでしょうか?
宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/07 13:30