n 番目ごとの要素を間引きまたは抽出して、長いコレクションをダウンサンプリングしようとしています。
配列拡張機能で得たものは次のとおりです。
func downsampled(to threshold: Int) -> [T] {
// Validate that threshold falls in valid range
guard !isEmpty, 1...count ~= threshold else { return Array(self) }
let skip = (count / threshold) + 1
var index = 0
var items = [T]()
while index < count {
items.append(self[index])
index += skip
}
return items
}
元の配列には 50 ~ 100k のアイテムがあると予想しており、おそらく画面のネイティブ境界幅 (500 ~ 1k ポイント) にダウンサンプリングします。
これを行うためのより簡潔または効率的な方法はありますか?