在J中安全地层压字符串而不会有复制风险

时间:2015-02-23 22:34:00

标签: j

如果你用多个字符层压(,:)字符串,你会得到一个很好的填充数组:

   x =: 'x'
   y =: 'yolo'
   z =: 'zebra'
   y ,: z
yolo 
zebra

如果您叠加单个字符,则会复制标量:

   y ,: x
yolo
xxxx

您可以通过将标量转换为带$

的向量来避免这种情况
   y ,: 1$ x
yolo
x   

但如果你是盲目的话,情况就不那么好了:

   y ,: 1$ z
yolo
z   

是否有一种简单而直接的方法来层叠字符串x和y而不提前知道其中一个字符串是否只有一个字符长?

2 个答案:

答案 0 :(得分:3)

在层压之前添加一个带,的轴:

y,:,x
yolo
x   

y,:,z
yolo 
zebra

答案 1 :(得分:1)

f =:,:& ,当只有2个字符串时工作正常,但是当有几个字符串时,ravel感觉不是正确的。

   f=: ,: & , 
   'yellow' f 'x'
yellow
x     
   'yellow' f 'x' f 'blue'
yellow  
x   blue

出于这个原因,我更愿意引入一个动词来强制两个参数排名2.然后你可以使用append代替层叠。

   d2=: 13 : '(_2{. 1 1,$y)$,y'
   g=: ,&d2

   'yellow' g 'x'
yellow
x     
   'yellow' g 'x' g 'blue'
yellow
x     
blue