有没有办法按两个字段对 Jekyll 中的列表进行排序?

Is there a way to sort lists in Jekyll by two fields?

有没有一种方法可以使用 Jekyll/Liquid 按两个字段对列表进行排序?例如,先按年份排序,然后按标题排序。我试过:

{% assign list = site.data.papers.papers | sort: 'year' | sort: 'title' %}

但是这让它只根据最后一个字段排序,在本例中是标题。对此有一些讨论,但它似乎没有被合并就被冻结了:https://github.com/jekyll/jekyll/issues/1802

谢谢!

group_by 救援:

{% assign years = site.data.papers.papers | group_by: "year" %}
{% assign yearsSorted = years | sort: "name" %}
<ul>
{% for y in yearsSorted %}
  <li>{{ y.name }}
    <ul>
      {% assign yearTitlesSorted = y.items | sort: "title" %}
      {% for t in yearTitlesSorted %}
      <li>{{ t.title }}</li>
      {% endfor %}
    </ul>
  </li>
{% endfor %}
</ul>

如果您从单个 array 散列开始,并且您希望 以相同结构中的相同数组结束(即不分组,只是多-排序),使用:

{% assign grouped = array | group_by: 'field1' %}
{% for item in grouped %}
   {% assign sorted = item['items'] | sort: 'field2' %}
   {% if forloop.first %}
      {% assign array = sorted %}
   {% else %}
      {% assign array = array | concat: sorted %}
   {% endif %}
{% endfor %}