iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >按照字母顺序对 csv 文件中的内容进行排序的 Go 代码示例
  • 311
分享到

按照字母顺序对 csv 文件中的内容进行排序的 Go 代码示例

2024-04-04 23:04:35 311人浏览 八月长安
摘要

珍惜时间,勤奋学习!今天给大家带来《按照字母顺序对 csv 文件中的内容进行排序的 Go 代码示例》,正文内容主要涉及到等等,如果你正在学习golang,或者是对Golang有疑问,欢迎大家关注我!

珍惜时间,勤奋学习!今天给大家带来《按照字母顺序对 csv 文件中的内容进行排序Go 代码示例》,正文内容主要涉及到等等,如果你正在学习golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我正在尝试使用 go 根据第一列中的姓氏按字母顺序排序包含一系列名称的 .csv 文件。我到处寻找,但似乎找不到办法。有没有办法做到这一点,同时保持同一行中的其他值? 我有三个同名的 .csv 文件,但我必须对它们进行洗牌才能完成我的任务(随机表座位算法)。我希望能够将它们重新按定义的字母顺序排列,以便我可以确保人们不会连续坐在一起。

提前致谢。 :)

编辑:可能值得展示我用来洗牌的函数:

func Shuffle(slice []Person) []Person {
r := rand.New(rand.NewSource(time.Now().Unix()))
ret := make([]Person, len(slice))
n := len(slice)
for i := 0; i < n; i++ {
    randIndex := r.Intn(len(slice))
    ret[i] = slice[randIndex]
    slice = append(slice[:randIndex], slice[randIndex+1:]...)
}
return ret

person[] 切片只是一个包含名字和姓氏的结构。


解决方案


go 的 sort 软件包附带了 great example。请参阅修改后的实现,它应该可以满足您的要求。

package main

import (
    "encoding/csv"
    "fmt"
    "io"
    "log"
    "sort"
    "strings"
)

// Unsorted sample data
var unsorted = `Balaam,Wileen,Saint Louis
Meachan,Lothaire,Lefengzhen
Scoggin,Ivonne,Pag
Hawarden,Audrye,Leiria
Claypool,Biddy,Maiorca
Stanford,Douglas,Báguanos
Petriello,Yvor,Obryte
Hatter,Margette,Luoping
Pepall,Linzy,Hucun
Carter,Kit,Parungjawa
`

type Person struct {
    Lastname  string
    Firstname string
    City      string
}

// Create a new Person record from a given string slice
func NewPerson(fields []string) (p Person, err error) {
    if len(fields) < 3 {
        return p, fmt.Errorf("not enough data for Person")
    }
    p.Lastname = fields[0]
    p.Firstname = fields[1]
    p.City = fields[2]
    return
}

// ByLastname implements sort.Interface for []Person based on the Lastname field.
type ByLastname []Person

func (a ByLastname) Len() int           { return len(a) }
func (a ByLastname) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a ByLastname) Less(i, j int) bool { return a[i].Lastname < a[j].Lastname }

func main() {
    // Open unsorted CSV from string
    r := csv.NewReader(strings.NewReader(unsorted))

    var people []Person

    for {
        // Read CSV line by line
        record, err := r.Read()
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }

        // Create Person from line in CSV
        person, err := NewPerson(record)
        if err != nil {
            continue
        }
        people = append(people, person)
    }

    // Sort CSV by Lastname
    sort.Sort(ByLastname(people))

    // Print to stdout
    for _, p := range people {
        fmt.Printf("%s %s from %s\n", p.Lastname, p.Firstname, p.City)
    }

    // Here you would write your CSV
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。

您可能感兴趣的文档:

--结束END--

本文标题: 按照字母顺序对 csv 文件中的内容进行排序的 Go 代码示例

本文链接: https://www.lsjlt.com/news/595768.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作