You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Perl 6中获取多匹配字符的合并indices结果?

解决方法:合并并排序多个字符的索引

你遇到的问题是因为("a", "b").any会分别返回每个目标字符匹配的索引集合,而不是直接合并后的结果。这里有两种高效的方法可以得到你想要的合并后排序的索引列表,完全不需要正则表达式:

方法1:合并现有结果并排序

如果已经通过indices方法得到了分开的索引集合,只需要把它们合并后排序即可:

# 假设你已经得到了分开的结果
partial_indices = "banana".indices(("a", "b").any)
# 合并并排序
combined_indices = sort(vcat(partial_indices...))

这样combined_indices就会是[0, 1, 3, 5],完全符合你的需求。

方法2:一次遍历直接收集索引

如果想要更高效的方式,可以直接遍历字符串的每个字符,检查是否是目标字符,符合条件就记录索引(注意如果是0-based索引需要调整):

s = "banana"
target_chars = ('a', 'b')
indices = Int[]

for (pos, char) in enumerate(s)
    # 转换为0-based索引(如果你的环境是1-based的话)
    if char in target_chars
        push!(indices, pos - 1)
    end
end

这种方法只需要遍历字符串一次,内存和时间效率都很高,非常适合你担心程序性能的场景。

两种方法都避开了正则表达式,不会给你的程序带来额外的性能负担,你可以根据自己的代码场景选择合适的方式。

内容的提问来源于stack exchange,提问作者Eugene Barsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 08:53:19