为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据go中的日期列对csv数据进行排序

如何根据go中的日期列对csv数据进行排序

Go
慕神8447489 2022-06-01 18:16:55
我对 GO 完全陌生。请问,任何人都可以帮助如何根据日期列对 CSV([][]string)数据进行排序?因为数据中有重复项,所以我将其转换为映射以删除重复项并返回切片。但是通过这一步,现在数据是未排序的。如何根据日期列对数据进行排序?有人可以帮忙吗?删除重复项func removeDuplicatesFromListQuote(quotes [][]string) [][]string {dict := make(map[string][]string)for i, val := range quotes {    if i == 0 {        continue    }    dict[val[0]] = []string{val[1], val[2], val[3], val[4], val[5]}}var unique [][]stringnewLine := make([]string, 0)unique = append(unique, []string{"Date", "Open", "High", "Low", "Close", "Volume"})for key, val := range dict {    newLine = []string{key, val[0], val[1], val[2], val[3], val[4]}    unique = append(unique, newLine)}e要排序的数据Date,Open,High,Low,Close,Volume05111985,0.33,0.34,0.33,0.33,2688560012021986,0.43,0.43,0.42,0.43,3326400011051999,1.60,1.65,1.56,1.60,11464880003052000,4.25,4.33,3.99,4.11,12244960001112004,3.75,3.80,3.72,3.75,15051260019072017,150.48,151.42,149.95,151.02,2092300017091992,1.69,1.69,1.62,1.64,4310880028051985,0.32,0.32,0.30,0.30,12774160024071985,0.29,0.30,0.29,0.29,4217920006042000,4.67,4.80,4.40,4.47,6490680013042009,17.14,17.28,17.00,17.17,9730910026022018,176.35,179.39,176.21,178.97,3816220015051995,1.54,1.56,1.52,1.56,9833880023031999,1.23,1.23,1.17,1.18,10388840011092003,1.59,1.63,1.58,1.61,5342120014072017,147.97,149.33,147.33,149.04,2013210007031990,1.25,1.29,1.25,1.26,5105520006061995,1.56,1.58,1.55,1.57,78817200
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您可以为 sort.Sort 添加一些方法来调用和排序您的数据。您的数据的第一列似乎是格式为 MMDDYYYY 的日期。


package main


import (

    "fmt"

    "sort"

    "time"

)


type CSV [][]string


// Determine if one CSV line at index i comes before the line at index j.

func (data CSV) Less(i, j int) bool {

    dateColumnIndex := 0

    date1 := data[i][dateColumnIndex]

    date2 := data[j][dateColumnIndex]

    timeT1, _ := time.Parse("01022006", date1)

    timeT2, _ := time.Parse("01022006", date2)


    return timeT1.Before(timeT2)

}


// Other functions required for sort.Sort.

func (data CSV) Len() int {

    return len(data)

}

func (data CSV) Swap(i, j int) {

    data[i], data[j] = data[j], data[i]

}


func main() {

    data := [][]string{

        []string{"05111985", "0.33", "0.34", "0.33"},

        []string{"11051999", "1.60", "1.65", "1.56"},

        []string{"12021986", "0.43", "0.43", "0.42"},

    }


    // Sort the data in place using the methods above.

    sort.Sort(CSV(data))

    fmt.Println(data)

}

输出:[[05111985 0.33 0.34 0.33] [12021986 0.43 0.43 0.42] [11051999 1.60 1.65 1.56]].


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号