Raku 数组不会排序
Raku array will not sort
我正在尝试对 list/array 个字符串进行排序:
> my @e = Q (list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table)
使用 https://docs.raku.org/type/Array#(List)_routine_sort 我尝试
> say @e.sort
(list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table)
但是
say <list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table>.sort
有效。
但是,如何将数据保存到数组中并然后 排序呢?喜欢 say @e.sort
?
这是引用结构的问题。
如果我用
my @e = <list_regex_files ...>
而不是 my @e = Q (...)
然后
@e.sort
有效。
回应@Elizabeth 的评论,dd 是你的朋友...
> my @a1 = Q (a b c); dd @a1; #Array @a1 = ["a b c"]
> my @a2 = <a b c>; dd @a2; #Array @a2 = ["a", "b", "c"]
这里是文档https://docs.raku.org/language/quoting,供路过的读者阅读
Q
是引用域特定子语言的基础。
因此它非常简陋,它唯一做的就是原始引用。您甚至无法转义结束分隔符。
say Q (a b c \).raku
# "a b c \"
您可以为该基本语言启用额外的功能,例如启用 :backslash
。 (:b
是别名)
say Q :backslash (a b c \)).raku
# "a b c )"
您可能认为 :words
(:w
) 或 :quotewords
(:ww
) 功能已启用。
say Q :words (a b c).raku
# ("a", "b", "c")
say Q :quotewords (a b 'c d' "e f").raku
# ("a", "b", "c d", "e f")
其中一些功能非常有用,因此有其他方法可以编写它们。
例如 :single
(:q
) 功能启用反斜杠结束定界符,但通常只用单引号拼写 ' '
.
'a b c \' d' eqv Q :single 'a b c \' d' eqv Q:q 'a b c \' d'
单引号还有一个别名q
。
'a b c \' d' eqv q 'a b c \' d'
还有一个快捷方式,拼写为< >
。
<a b c> eqv Q :single :words (a b c) eqv Q:s:w (a b c)
您认为自己使用的是哪个。
您可以启用或禁用更多功能。 For a more comprehensive list and examples see the documentation.
这里有两个问题。首先,如果您坚持使用 Q
引用形式,那么在排序之前您必须 comb
或 split
您的字符串。其次,不清楚您能否保证您的元素将由一个(且只有一个)空格字符分隔,这意味着您必须自己处理 'variable whitespace':
my @f = Q (list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table); #variable whitespace
say @f.elems; #1
say @f.comb(/ \S+ /).elems; #17
say @f.split(' ', :skip-empty).elems; #17 with :skip-empty, 23 without
say @f.split(/ <.ws> /, :skip-empty).elems; #17 with skip-empty, 35 without
但是,您想要的结果很容易从 Q:w
('quote-word' 引用)开始而不是普通的 Q
:
my @g = Q:w (list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table); #variable whitespace
say @g.elems; #17
.raku.put for @g.sort;
输出:
"barplot"
"density_scatterplot"
"dir"
"execute"
"get_sample_ID"
"group_bar"
"json_file_to_ref"
"list_regex_files"
"multiline_plot"
"read_table"
"ref_to_json_file"
"scatterplot_2d_color"
"venn"
"violin_plot"
"workbook_to_hash"
"worksheet_to_hash"
"write_2d_array_to_tex_tabular"
https://docs.raku.org/language/quoting
https://docs.raku.org/routine/split
我正在尝试对 list/array 个字符串进行排序:
> my @e = Q (list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table)
使用 https://docs.raku.org/type/Array#(List)_routine_sort 我尝试
> say @e.sort
(list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table)
但是
say <list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table>.sort
有效。
但是,如何将数据保存到数组中并然后 排序呢?喜欢 say @e.sort
?
这是引用结构的问题。
如果我用
my @e = <list_regex_files ...>
而不是 my @e = Q (...)
然后
@e.sort
有效。
回应@Elizabeth 的评论,dd 是你的朋友...
> my @a1 = Q (a b c); dd @a1; #Array @a1 = ["a b c"]
> my @a2 = <a b c>; dd @a2; #Array @a2 = ["a", "b", "c"]
这里是文档https://docs.raku.org/language/quoting,供路过的读者阅读
Q
是引用域特定子语言的基础。
因此它非常简陋,它唯一做的就是原始引用。您甚至无法转义结束分隔符。
say Q (a b c \).raku
# "a b c \"
您可以为该基本语言启用额外的功能,例如启用 :backslash
。 (:b
是别名)
say Q :backslash (a b c \)).raku
# "a b c )"
您可能认为 :words
(:w
) 或 :quotewords
(:ww
) 功能已启用。
say Q :words (a b c).raku
# ("a", "b", "c")
say Q :quotewords (a b 'c d' "e f").raku
# ("a", "b", "c d", "e f")
其中一些功能非常有用,因此有其他方法可以编写它们。
例如 :single
(:q
) 功能启用反斜杠结束定界符,但通常只用单引号拼写 ' '
.
'a b c \' d' eqv Q :single 'a b c \' d' eqv Q:q 'a b c \' d'
单引号还有一个别名q
。
'a b c \' d' eqv q 'a b c \' d'
还有一个快捷方式,拼写为< >
。
<a b c> eqv Q :single :words (a b c) eqv Q:s:w (a b c)
您认为自己使用的是哪个。
您可以启用或禁用更多功能。 For a more comprehensive list and examples see the documentation.
这里有两个问题。首先,如果您坚持使用 Q
引用形式,那么在排序之前您必须 comb
或 split
您的字符串。其次,不清楚您能否保证您的元素将由一个(且只有一个)空格字符分隔,这意味着您必须自己处理 'variable whitespace':
my @f = Q (list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table); #variable whitespace
say @f.elems; #1
say @f.comb(/ \S+ /).elems; #17
say @f.split(' ', :skip-empty).elems; #17 with :skip-empty, 23 without
say @f.split(/ <.ws> /, :skip-empty).elems; #17 with skip-empty, 35 without
但是,您想要的结果很容易从 Q:w
('quote-word' 引用)开始而不是普通的 Q
:
my @g = Q:w (list_regex_files json_file_to_ref write_2d_array_to_tex_tabular dir get_sample_ID density_scatterplot violin_plot multiline_plot ref_to_json_file execute venn barplot scatterplot_2d_color worksheet_to_hash group_bar workbook_to_hash read_table); #variable whitespace
say @g.elems; #17
.raku.put for @g.sort;
输出:
"barplot"
"density_scatterplot"
"dir"
"execute"
"get_sample_ID"
"group_bar"
"json_file_to_ref"
"list_regex_files"
"multiline_plot"
"read_table"
"ref_to_json_file"
"scatterplot_2d_color"
"venn"
"violin_plot"
"workbook_to_hash"
"worksheet_to_hash"
"write_2d_array_to_tex_tabular"
https://docs.raku.org/language/quoting
https://docs.raku.org/routine/split