gpt4 book ai didi

j - 将动词应用于子数组,就位?

转载 作者:行者123 更新时间:2023-12-04 23:50:24 25 4
gpt4 key购买 nike

在 J 中,我可以根据一些谓词就地更新数组的子集,如下所示:

    y (k}~) |. y {~ k =. I. '123' e.~ y =. '[1.2.3]'
[3.2.1]

我意识到我可以在这里分解出一个连词,但是首先有没有更优雅的方法来做到这一点? 123只是一个例子。我特别想做的是:
  • 获取一个数组的索引数组 ( k )
  • 将这些索引处的数组项提取到一个新数组中
  • 将该数组转换为具有相同类型和形状的新数组
  • 将新数组的值放回插槽中。

  • 此外,动词作为一个整体对数组进行操作也很重要,因为我主要想做的是对子数组进行置换和变换。 (因此在示例中是 |.。)

    有没有更简单的方法来做到这一点?

    最佳答案

    或多或少有一个 standard adverb为了这:

       tweak  =: (@:{) (`[) (`]) }
    twist =: |. tweak
    '123' (I.@:e.~ twist ]) '[1.2.3]'
    [3.2.1]

    在这里, tweak使用 } 的动名词形式到:
  • 选择索引 x来自数组 y使用 { .
  • 使用键合连词 @{ 对该 [sub-] 数组应用转换函数.也就是说,{选择,和 @:要求一个动词应用于该选择;扭曲以 |. 的形式提供这个动词(逆转)。
  • 将转换后的 [子] 数组填充回原始数组 y (由 ] 表示)在相同的指数 x (由 [ 表示)。

  • 我要注意几点:
  • J 中的子数组修改相当罕见,因为该语言鼓励整体转换。换句话说:数组的项目通常被认为是对等的,并且(通常)被平等对待。特殊处理某些项目(索引)是不寻常的,需要更加小心,特别是如果选择是临时的(而不是常规的,或遵循某种模式)。
  • “就地修改”是一个误导性术语,因为(正如您正确指出的那样),构建了一个新数组,并且修改了这个新数组。真正的就地修正是可能的,但需要 different approach (涉及名称管理和/或显式代码)。
  • 在您选择的特定示例中存在一些认知失调:您的查找功能,e. , 本质上是无序的,但您的转换函数,|. , 只关心秩序。这本身并没有错,但在重新排序数组部分的上下文中可能会令人困惑(例如, y=.'[1.1.1]' )。
  • 关于j - 将动词应用于子数组,就位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818007/

    25 4 0
    文章推荐: r - 计算一组间隔之间的成对距离
    文章推荐: angularjs -