第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

按一定百分比均勻過濾列表 - Kotlin/Java

按一定百分比均勻過濾列表 - Kotlin/Java

POPMUISE 2022-12-28 13:57:50
我正在 Kotlin/Java 中尋找一種最有效的方法List來按一定百分比過濾掉過濾元素,并且刪除過濾后的元素將以統(tǒng)一的方式應(yīng)用于整個(gè)集合(即 - 要?jiǎng)h除的元素跨越整個(gè)集合均勻收集);例如將以下內(nèi)容過濾 50%[0,1,2,3,4,5,6,7,8,9] = [0,2,4,6,8]將以下內(nèi)容過濾 10%[1,100,1000,10000] = [1,100,10000]我想出了以下 Kotlin 擴(kuò)展函數(shù),它在百分比 < 50% 且集合很大時(shí)效果很好,但當(dāng)集合 > 50% 時(shí),這種方法就失敗了,因?yàn)樗惶幚碚麛?shù)除法。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 thisreturn this.filterIndexed { index, _ -> (index % distro) != 0 }有沒有更好的方法來做到這一點(diǎn)并且當(dāng)百分比大于 50% 時(shí)也能工作?
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

我認(rèn)為標(biāo)準(zhǔn)庫中沒有多少有用的東西,但我想出了這種“手動(dòng)”方法:


fun <T> List<T>.takeProportion(prop: Double): List<T> {

    if (prop < 0 || prop > 1)

        throw IllegalArgumentException("prop ($prop) must be between 0 and 1")

    val result = ArrayList<T>()

    var tally = 0.5

    for (i in this) {

        tally += prop

        if (tally >= 1.0) {

            result += i

            tally -= 1

        }

    }

    return result

}

它使用一種錯(cuò)誤擴(kuò)散的方式來確保值在列表中均勻地取值,并使用浮點(diǎn)數(shù)以便它平滑地處理從 0.0(給出一個(gè)空列表)到 1.0(取每個(gè)元素)的任何比例。


(可能有一種方法只使用整數(shù)運(yùn)算來完成它,但使用浮點(diǎn)數(shù)可能更容易編碼和理解。)


(您可能可以通過使用 使它看起來更實(shí)用filter(),但這并不合適,因?yàn)?lambda 必須使用和更新外部狀態(tài)。)


查看完整回答
反對(duì) 回復(fù) 2022-12-28
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)