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

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

基于線性時(shí)間中多個(gè)條件的切片中的廣義計(jì)數(shù)元素

基于線性時(shí)間中多個(gè)條件的切片中的廣義計(jì)數(shù)元素

Go
三國紛爭(zhēng) 2022-08-09 20:22:26
我需要以許多不同的方式在長數(shù)組中計(jì)算元素。下面是特殊情況的用例示例:func main() {    test := []test{test{"A", "1", "$"}, test{"A", "2", "€"}, test{"B", "3", "$"}}    countA := 0    countDollar := 0    countADollar := 0    for _, e := range test {        if e.prop1 == "A" {            countA++        }        if e.prop3 == "$" {            countDollar++        }        if e.prop1 == "A" && e.prop3 == "$" {            countADollar++        }    }    fmt.Printf("countA: %v, count$: %v, countA$: %v\n", countA, countDollar, countADollar)}這將打印計(jì)數(shù)A: 2, 計(jì)數(shù)$: 2, 計(jì)數(shù)A$: 1https://play.golang.org/p/R0nhwFpyN7H現(xiàn)在的問題是:有沒有辦法對(duì)此進(jìn)行泛化,以便我可以在數(shù)組的一次迭代中根據(jù)屬性計(jì)算不同的總和,而無需單獨(dú)實(shí)現(xiàn)每種情況?編輯2:這是一個(gè)基于用戶Volker建議的稍微好一點(diǎn)的版本:package mainimport "fmt"type test struct {    prop1 string    prop2 string    prop3 string}func count2(data []test, f func(test) bool) {        count1 := 0;    for _, e := range data {        if f(e) {            count1++        }    }    fmt.Printf("count1: %v", count1)}func main() {    data := []test{test{"A", "1", "$"}, test{"A", "2", "€"}, test{"B", "3", "$"}}        myTestCrit := func(t test) bool {        return t.prop1 == "A"    }    count2(data, myTestCrit)}https://play.golang.org/p/kB60gJCBkyn編輯3:這是一個(gè)進(jìn)一步的推廣,接受多個(gè)計(jì)數(shù)器。感謝Volker和Eli的投入。也許這些來源對(duì)其他人也有用。func count3(data []test, f []func(test) bool) {        counts := make([]int, len(f));    for _, e := range data {        for i, fi := range f {            if fi(e) {                counts[i]++            }        }    }    fmt.Printf("counts: %v\n", counts)}func main() {    data := []test{test{"A", "1", "$"}, test{"A", "2", "€"}, test{"B", "3", "$"}}        myTestCrit := func(t test) bool {        return t.prop1 == "A"    }        myTestCritDollar := func(t test) bool {        return t.prop3 == "$"    }            countCrits := make([]func(t test) bool, 2)    countCrits[0] = myTestCrit    countCrits[1] = myTestCritDollar    count3(data, countCrits)}編輯:我也愿意接受關(guān)于如何改進(jìn)問題的建議。這是我遇到的一個(gè)合法問題,一般方法將大大簡(jiǎn)化我的代碼。
查看完整描述

1 回答

?
ABOUTYOU

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

Go中沒有特別的醬汁可以做到這一點(diǎn)。您需要在切片上編寫一個(gè)循環(huán) - 沒關(guān)系。


您的原始代碼絕對(duì)沒問題,特別是如果您需要在同一循環(huán)中執(zhí)行多個(gè)不同的計(jì)數(shù)。該函數(shù)也很好,它抽象出一些代碼(雖然不多),但它只對(duì)單個(gè)計(jì)數(shù)器有用 - 單個(gè)過濾器/測(cè)試函數(shù)。count2


你可以繼續(xù)推廣它,例如,傳入一個(gè)結(jié)構(gòu)切片,其中每個(gè)結(jié)構(gòu)都是:Metrics


type Metrics struct {

  Counter int

  Filter func(test) bool

}

這完全取決于您的確切需求。


如果你在這里尋找慣用的Go方式:不要太擔(dān)心過早的抽象。編寫最清晰/最易讀的代碼來解決眼前的任務(wù)。


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

添加回答

舉報(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)