我在 APL 中编写了一个 dfn 来删除前导、尾随和多个空格。有没有其他方法可以进一步改进?
{a←(⍵∊' ') ⋄ b←((¯1↓(a,0)×(1,a))+(⌽∧\(⌽⍵)=' '))=0 ⋄ b/⍵} ' sad as asdasd asd '
o/p sad as asdasd asd
删除前导空格:
{(+/×\' '=⍵)↓⍵}
您可以通过反转字符串从右侧删除并运行相同的代码。
删除多个空格:
{(~' '⍷⍵)/⍵}
这是一个小的重写,只是为了删除括号并使用布尔运算符:
{a←⍵=' ' ⋄ b←~(¯1↓(a,0)∧(1,a))∨(⌽∧\⌽a) ⋄ b/⍵}
作为副作用,它也快了 16% ;-)
我还建议)load dfns
并)ed dxb
从那个 fn 中学习,它做同样的速度更快,也适用于矩阵、嵌套数据等。
删除前导、尾随和多个空格
{(' '=1↑∆)↓(-' '=¯1↑∆)↓∆←(∼' '⍷⍵)/⍵}
这种方式效率更高。