在J中,我可以根据某个谓词更新数组的子集,如下所示:
y (k}~) |. y {~ k =. I. '123' e.~ y =. '[1.2.3]'
[3.2.1]
Run Code Online (Sandbox Code Playgroud)
我意识到我可以在这里考虑一个连词,但是首先有更优雅的方法吗?这123只是一个例子.具体来说,我想做的是:
k)此外,重要的是动词作为一个整体在数组上运行,因为我主要想做的是置换和转换子数组.(因此|.在示例中.)
有更简单的方法吗?
对此有一个或多或少的标准副词:
tweak =: (@:{) (`[) (`]) }
twist =: |. tweak
'123' (I.@:e.~ twist ]) '[1.2.3]'
[3.2.1]
Run Code Online (Sandbox Code Playgroud)
在这里,tweak使用gerundial形式}:
x从阵列中y使用{.@{.也就是说,{选择,并 @:要求动词应用于该选择; twist以|.(反向)形式提供此动词.y(由...表示])x(由...表示[).我会注意到几件事:
e.本质上是无序的,但您的转换函数|.仅关注订单.这本身没有任何问题,但在重新排序数组的部分(例如,考虑y=.'[1.1.1]')的背景下可能会令人困惑.