Как отсортировать структуру с несколькими параметрами сортировки?

Немного уродливый способ:

char *pos;
if ((pos=strchr(Name, '\n')) != NULL)
    *pos = '\0';
else
    /* input too long for buffer, flag error */

Немного странный способ:

strtok(Name, "\n");

Обратите внимание, что функция strtok не работает должным образом, если пользователь входит пустую строку (т.е. нажмите только Enter). Он оставляет неизменным \n.

Конечно, есть и другие.

25
задан Flimzy 2 April 2019 в 11:27
поделиться

1 ответ

Вот немного более краткая реализация принятого ответа:

package main

import (
    "fmt"
    "sort"
)

type Member struct {
    FirstName string
    LastName  string
}

func main() {
    members := []Member{
        {"John", "Doe"},
        {"Jane", "Doe"},
        {"Mary", "Contrary"},
    }

    fmt.Println(members)

    sort.Slice(members, func(i, j int) bool {
        return members[i].LastName < members[j].LastName || members[i].FirstName < members[j].FirstName
    })

    fmt.Println(members)
}

Выполнение распечатает следующий вывод:

[{John Doe} {Jane Doe} {Mary Contrary}]
[{Mary Contrary} {Jane Doe} {John Doe}]

Это как ожидалось: участники печатаются в порядке возрастающей фамилии, где в случае связи, они печатаются в порядке имени.

0
ответ дан 28 November 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: