首页 文章

如何根据C中的多个字段对数组进行排序?

提问于
浏览
0

我有一系列的活动,我想根据他们的年份,然后每年的月份,然后每个月的每天,然后每天的小时来对它们进行排序 .

typedef struct {
    struct tm start;
    struct tm end;
} event;
...
event events[100];

我只需要担心 start 日期的排序 . 几个小时我一直在努力...

1 回答

  • 5

    与对多个键进行任何排序的方式相同:一次一个,按所需的优先顺序排序 .

    qsort()回调可能看起来像这样:

    static int event_compare(const void *a, const void *b)
    {
      const event *ae = a, *be = b;
    
      if(ae->start.tm_year < be->start.tm_year)
        return -1;
      else if(ae->start.tm_year > be->start.tm_year)
        return 1;
      /* Years are equal, try to solve that by checking month. */
      if(ae->start.tm_month < be->start.tm_month)
        return -1;
      else if(ae->start.tm_month > be->start.tm_month)
        return 1;
      /* Months are equal, go on with day, and so on. */
    }
    

相关问题