最小の正の差を持つ配列要素を検索/フィルタリングする方法 質問する

最小の正の差を持つ配列要素を検索/フィルタリングする方法 質問する

Swift を使用して、複雑な配列のフィルターまたは並べ替えを実行しようとしていますが、行き詰まっています。整数の配列には、1 から 7 個の要素を含めることができます。配列にない特定の整数値 (X とします) が与えられた場合、その値と X の差が最小になる配列要素を見つけたいと思います。

ベストアンサー1

スイフト2関数型プログラミングでは、これを「ワンライナー」として実行できます。

let numbers = [ 1, 3, 7, 11]
let x = 6

let closest = numbers.enumerate().minElement( { abs($0.1 - x) < abs($1.1 - x)} )!

print(closest.element) // 7 = the closest element
print(closest.index)   // 2 = index of the closest element

enumerate()対応するインデックスとともにすべての配列要素を反復処理し、閉包に関してminElement()「最小」のペアを返します。閉包は、2 つの要素の差の絶対値を と比較します。(index, element)x

(ここでは配列が空ではないと想定されているため、 はminElement()返されませんnil。)

絶対差は (ほぼ) すべての配列要素に対して 2 回計算されるため、大規模な配列の場合、これはおそらく最速のソリューションではないことに注意してください。ただし、小規模な配列の場合、これは問題になりません。

スイフト3:

let numbers = [ 1, 3, 7, 11]
let x = 6
let closest = numbers.enumerated().min( by: { abs($0.1 - x) < abs($1.1 - x) } )!
print(closest.element) // 7
print(closest.offset) // 2

スウィフト1.2バージョンは編集履歴で確認できます。

おすすめ記事