gpt4 book ai didi

Jekyll:默认的 _data 排序标准是什么?

转载 作者:行者123 更新时间:2023-12-04 13:46:03 25 4
gpt4 key购买 nike

当遍历 _data 中的文件数组时文件夹,文件排序的默认标准是什么?

起初我希望它按字母顺序排序,但经过一些测试后我意识到它不是。尽管如此,我还是无法弄清楚用于对文件进行排序的标准是什么。

{%- for file in site.data.folder -%}
{{ file | inspect }}
<br />
<br />
{%- endfor -%}

据我了解 file是一个包含文件名作为第一个元素和数据作为第二个元素的数组,所以我不确定使用 sort使用任何属性名称都可以。当我尝试时,我收到了错误消息:
Liquid Exception: no implicit conversion of String into Integer
使用时 sort没有参数,我可以返回按文件名字母顺序排序的文件:
{%- assign files = site.data.folder | sort -%}
{%- for file in files -%}
{{ file | inspect }}
<br />
<br />
{%- endfor -%}

所以我的问题是:
  • _data的默认排序标准是什么?文件?
  • 是否可以根据对象属性进行排序? (我在想,当你访问 site.data.folder 时,那个问题是有一个数组而不是纯对象)


  • 例子:

    创建默认的 Jekyll 页面后,我创建了 _data/folder目录,我将在其中包含 5 个随机 .json文件:
    _data/folder/a.json
    _data/folder/b.json
    _data/folder/c.json
    _data/folder/d.json
    _data/folder/e.json

    它们中的每一个都有以下内容:

    _data/文件夹/a.json:
    {"name":"Mike"}

    _data/文件夹/b.json:
    {"id":"4343"}

    _data/文件夹/c.json:
    [{"age":"29"},{"job":"journalist"}]

    _data/文件夹/d.json:
    {"name":"John"}

    _data/文件夹/e.json
    {"haircolor":"green"}

    有了这些文件,我创建了一个名为 page.html 的页面。在根目录上:
    ---
    ---
    <pre>{{ site.data.folder | inspect }}</pre>

    <br />
    <br />

    {%- for file in site.data.folder -%}
    <pre>{{ file | inspect }}</pre>
    <br />
    {%- endfor -%}

    该页面的输出是:
    {"e"=>{"haircolor"=>"green"}, "c"=>[{"age"=>"29"}, {"job"=>"journalist"}], "d"=>{"name"=>"John"}, "a"=>{"name"=>"Mike"}, "b"=>{"id"=>"4343"}}



    ["e", {"haircolor"=>"green"}]


    ["c", [{"age"=>"29"}, {"job"=>"journalist"}]]


    ["d", {"name"=>"John"}]


    ["a", {"name"=>"Mike"}]


    ["b", {"id"=>"4343"}]

    这些文件不是按字母顺序排列的,而是按某种明显的随机顺序排列的。我可以使用以下方法按字母顺序获取它们:
    ---
    ---
    <pre>{{ site.data.folder | sort | inspect }}</pre>

    <br />
    <br />

    {%- assign folder = site.data.folder | sort -%}
    {%- for file in folder -%}
    <pre>{{ file | inspect }}</pre>
    <br />
    {%- endfor -%}

    输出:
    [["a", {"name"=>"Mike"}], ["b", {"id"=>"4343"}], ["c", [{"age"=>"29"}, {"job"=>"journalist"}]], ["d", {"name"=>"John"}], ["e", {"haircolor"=>"green"}]]



    ["a", {"name"=>"Mike"}]


    ["b", {"id"=>"4343"}]


    ["c", [{"age"=>"29"}, {"job"=>"journalist"}]]


    ["d", {"name"=>"John"}]


    ["e", {"haircolor"=>"green"}]

    但目前还不清楚没有 sort 的通话的订购标准是什么。 .

    最佳答案

    根据@ashmaroli 的假设,这不是 Jekyll 的问题,我开始对文件排序进行一些研究,并遇到了以下资源:

    在 Ruby 上使用 Dir 时的文件排序行为

    Indeterministic File order using Dir

    该链接描述了加载多个依赖项时的反直觉行为。如果文件的加载顺序很重要,下面的快捷方式可能会导致它们以与预期不同的顺序加载。

    Dir[File.join(File.dirname(__FILE__), 'example/*.rb')].each{ |f| require f }

    这显然是由于底层 glob根据链接中的答案进行系统调用。

    Python glob 排序

    How is Pythons glob.glob ordered?

    在上面的 SO 问题中,用户问为什么返回 glob Python 中的文件顺序与 ls -l 的输出顺序不同.尽管问题是关于 Python 而不是 Ruby,但对操作系统的底层调用可能是相同的。操作系统不需要以任何顺序传送文件,因此它们应该在调用后进行排序。

    first answer声明如果你运行 ls -U你会得到文件的无序列表,它与我在这里列出的顺序相匹配 _data Jekyll 上的对象没有排序。所以这很可能是奇怪排序的原因:它依赖于操作系统。

    由于 Jekyll 订购了 _post文件,我认为订购 _data 不是主要问题文件默认情况下也是如此,以避免任何混淆。但正如之前在问题本身中所述,使用 sort 可以轻松完成。筛选。

    关于Jekyll:默认的 _data 排序标准是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48345864/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com