在 APL 中合并向量

问题描述 投票:0回答:1

使用 Dyalog APL 我想采用一个掩码向量,其中“-”表示使用原始字符,任何其他字符将替换数据向量中的该位置。因此,在下面的示例中,在向量“b”上使用掩码“a”来创建向量“c”。

┌──────┬────────┬────┐
│X--Y-Z│--34--91│-+-+│ Mask Vector a
└──────┴────────┴────┘
┌──────┬────────┬────┐
│abcdef│hijklmno│stuv│ Data Vector b
└──────┴────────┴────┘
┌──────┬────────┬────┐
│XbcYeZ│hi34lm91│s+u+│ Resultant Vector c
└──────┴────────┴────┘

向量包含不同长度的字符串。我不想使用 APL 中内置的任何正则表达式或搜索和替换功能。

我创建了代码来执行此功能,但它似乎太复杂了,因为它要创建矩阵、旋转字符以及从行中提取数据。我确信在 APL 中有一种更简单的方法来执行此功能。我有兴趣看看更有经验的 APL 开发人员能想出什么。

vector masking apl
1个回答
0
投票
mask  ← 'X--Y-Z' '--34--91' '-+-+'
data  ← 'abcdef' 'hijklmno' 'stuv'
where ← '-'≠mask
fill ← where/¨mask
(where/¨data) ← fill
data

主要操作是

(where/¨data) ← fill
,这是“选择性赋值”的一个例子。

这个操作可以更简洁地定义为运算符:

merge ← {d←⍵ ⋄ (w/¨d)←(w←⍺⍺≠⍺)/¨⍺ ⋄ d}

并以

mask ('-' merge) data

的形式调用
© www.soinside.com 2019 - 2024. All rights reserved.