在Dyalog APL中使用⌸生成频率表时如何设置默认值?
为⌸生成的频率表预置初始值(Dyalog APL)
在使用⌸生成字符频率表时(例如{⍺,≢⍵}⌸'mississippi'),若要为已知缺失项(如所有大写字母⎕A)预置0计数,以下是几种实用的实现方法:
方法1:基准表替换补全
先生成基础频率表,再基于全量字母创建基准表,最后将已有频率替换到对应位置:
freq ← {⍺,≢⍵}⌸'mississippi' base ← (⊂⎕A),⊂0⍴≢⎕A ⍝ 构建包含所有大写字母和初始0的基准表 result ← base result[⍸base[;1]∊freq[;1];2] ← freq[;2] ⍝ 替换已有字母的计数
方法2:合并全量字母后调整计数
将目标字符串与全量字母合并后统计,再减去初始的1次(因每个字母在全量集合中已出现一次):
{⍺,≢⍵-1}⌸'mississippi',⎕A
原字符串中存在的字母,最终计数为原出现次数+1-1=实际次数;不存在的字母计数为1-1=0,直接得到补全后的结果。
方法3:利用索引匹配自动补0
通过索引定位实现已有频率与全量字母的匹配,缺失项自动填充0:
freq ← {⍺,≢⍵}⌸'mississippi' (⊂⎕A) ⍪ (freq[;2])[⍋freq[;1]⍳⎕A]
freq[;1]⍳⎕A返回每个大写字母在频率表中的位置索引,不存在的字母会指向超出频率表长度的位置,此时取对应计数时会自动填充0,最终与全量字母组合成完整结果表。
内容的提问来源于stack exchange,提问作者xpqz
相关产品推荐
相关产品推荐

