按 J 中的长度对字符串中的单词进行排序
Posted
技术标签:
【中文标题】按 J 中的长度对字符串中的单词进行排序【英文标题】:Sorting words in a string by their length in J 【发布时间】:2021-04-05 08:56:50 【问题描述】:我有以下字符串:
s=:'我们什么时候可以跳舞'
我可以用这个找到每个单词的长度:
# each ;:s
我可以按升序/降序对长度进行排序:(/:~) # each ;:s
这给了我盒装输出。
但是如何打印这些文字呢?
【问题讨论】:
预期输出:(对于升序):我们可以跳舞时 【参考方案1】:您已经在使用/:~
,它是二元Sort Up 的Reflex; /:~ y
等价于 y /: y
。这是一个方便的快捷方式,但在这种情况下,您要跳过的是您正在寻找的解决方案。 /:
(没有 Reflex)根据将导致排序的 y
的排列排列其 x
。 “将导致排序的y
的排列”顺便说一句是单子/:
(Grade Up) 是为了。
]w=:;:'when can we dance'
+----+---+--+-----+
|when|can|we|dance|
+----+---+--+-----+
/: w
1 3 2 0
(/: w) w
+---+-----+--+----+
|can|dance|we|when|
+---+-----+--+----+
w /: w
+---+-----+--+----+
|can|dance|we|when|
+---+-----+--+----+
所以要按其他东西对w
进行排序,比如项目的长度,只需提供其他东西作为Sort Up 的y
:
w /: # each w
+--+---+----+-----+
|we|can|when|dance|
+--+---+----+-----+
(/: # each) w NB. a hook
+--+---+----+-----+
|we|can|when|dance|
+--+---+----+-----+
;:
为您提供字符串中的 J 个单词,这可能不是您想要的:
;: 'when can''t we dance'
|open quote
| ;:'when can''t we dance'
;.
Cut 家族或stdlib's splitstring
或regexes 之一可能会有所帮助。
13 : ';: ''when can we dance''' NB. 13 : can be a mnemonic
(<;._1 ' when can we dance')"_
<;._1 ' ','when can''t we dance'
+----+-----+--+-----+
|when|can't|we|dance|
+----+-----+--+-----+
' ' splitstring 'when can''t we dance'
+----+-----+--+-----+
|when|can't|we|dance|
+----+-----+--+-----+
s=:'when can''t we dance' NB. excess space
<;._1 ' ',s NB. empty boxes in result
+----+-----+++--+-----+
|when|can't|||we|dance|
+----+-----+++--+-----+
require 'regex'
'[\w'']+' rxall s
+----+-----+--+-----+
|when|can't|we|dance|
+----+-----+--+-----+
要将这些单词列表重新转换为字符串,
w
+----+---+--+-----+
|when|can|we|dance|
+----+---+--+-----+
;: inv w
when can we dance
' ' joinstring w
when can we dance
【讨论】:
感谢 Julian 指出 J 在库支持字符串操作方面提供了什么。【参考方案2】:朱利安在上面的回答中很好地解释了处理撇号的方法,但如果你忽略它们的存在,我会使用&.
(下)和;:
(字)根据长度对它们进行排序装箱后再拆箱。
s=:'when can we dance'
(/: # each) &. ;: s
we can when dance
(/: # each)
是根据每个长度对它们进行排序的钩子,&.;:
将它们装箱,然后在最后将它们拆箱以提供结果。
【讨论】:
以上是关于按 J 中的长度对字符串中的单词进行排序的主要内容,如果未能解决你的问题,请参考以下文章
按文本字符长度对目录中的文件进行排序并复制到其他目录[关闭]