我正在 Kotlin/Java 中寻找一种最有效的方法List
来按一定百分比过滤掉过滤元素,并且删除过滤后的元素将以统一的方式应用于整个集合(即 - 要删除的元素跨越整个集合均匀收集);
例如
将以下内容过滤 50%[0,1,2,3,4,5,6,7,8,9] = [0,2,4,6,8]
将以下内容过滤 10%[1,100,1000,10000] = [1,100,10000]
我想出了以下 Kotlin 扩展函数,它在百分比 < 50% 且集合很大时效果很好,但当集合 > 50% 时,这种方法就失败了,因为它只处理整数除法。
private fun <E> List<E>.filterDownBy(perc: Int): List<E> {
val distro = this.size / ((perc * this.size) / 100)
if (perc == 0 || distro >= this.size)
return this
return this.filterIndexed { index, _ -> (index % distro) != 0 }
有没有更好的方法来做到这一点并且当百分比大于 50% 时也能工作?
慕尼黑8549860
相关分类