亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

合并排序計數器切片

合并排序計數器切片

Go
繁星coding 2022-07-04 16:03:21
我有一個關于切片、計數器、時間以及 Go 中令人費解的合并和排序的一般性問題。我從在線實踐練習中編寫了一個小程序來了解 Go,我很困惑為什么我編寫的解決方案會出錯。代碼只是兩個計數器切片,它們是按時間排序的,我決定嘗試合并它,然后再次按與計數對應的時間排序。我已經完成了其余的代碼,但合并讓我感到困惑。將提供代碼片段供您閱讀。package mainimport (  "fmt"  "time")/*Given Counter slices that are sorted by Time, merge the slices into one slice.Make sure that counters with the same Time are merged and the Count is increased.E.g:A = [{Time: 0, Count: 5}, {Time:1, Count: 3}, {Time: 4, Count 7}]B = [{Time: 1, Count: 9}, {Time:2, Count: 1}, {Time: 3, Count 3}]merge(A, B) ==>[{Time: 0, Count: 5}, {Time: 1: Count: 12}, {Time: 2, Count 1}, {Time: 3, Count: 3}, {Time: 4: Count: 7}]Explain the efficiency of your merging.*/type Counter struct {  Time  time.Time  Count uint64}var (  A = []Counter{    {Time: time.Unix(0, 0), Count: 5},    {Time: time.Unix(0, 1), Count: 3},    {Time: time.Unix(0, 4), Count: 7},  }  B = []Counter{    {Time: time.Unix(0, 0), Count: 5},    {Time: time.Unix(0, 1), Count: 12},    {Time: time.Unix(0, 2), Count: 1},    {Time: time.Unix(0, 3), Count: 3},    {Time: time.Unix(0, 4), Count: 7},  })func merge(a, b []Counter) []Counter {  // Insert your code here  res1 := append(a)  <--- ERROR?  res2 := append(b)  <--- ERROR?    return nil}func main() {  AB := merge(A, B)  for _, c := range AB {    fmt.Println(c)  }}
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

要解決有關附加和排序數組的問題,您只需將一個數組的片段附加到另一個數組,如下所示:


result := append(a, b...)

要根據 unix time 等內部結構類型對數組進行排序,最好的辦法是創建切片的自定義類型并實現 sort.Interface 的方法。


示例是:


type ByTime []Counter


func (c ByTime) Len() int           { return len(c) }

func (c ByTime) Swap(i, j int)      { c[i], c[j] = c[j], c[i] }

func (c ByTime) Less(i, j int) bool { return c[i].Time.Before(c[j].Time) }

然后只打電話


sort.Sort(ByTime(result))

完整示例: https: //play.golang.org/p/L9_aPRlQsss


但請注意,我并沒有解決您的編碼練習如何基于內部指標合并兩個數組,僅將一個附加到另一個。你需要在你的家庭作業中做一些工作;-) 這仍然會產生排序的(不是元素合并的)切片:


{1970-01-01 00:00:00 +0000 UTC 5}

{1970-01-01 00:00:00.000000001 +0000 UTC 3}

{1970-01-01 00:00:00.000000001 +0000 UTC 9}

{1970-01-01 00:00:00.000000002 +0000 UTC 1}

{1970-01-01 00:00:00.000000003 +0000 UTC 3}

{1970-01-01 00:00:00.000000004 +0000 UTC 7}


查看完整回答
反對 回復 2022-07-04
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號