如何在Ruby中将含范围的数值字符串转换为数组
解决Ruby中解析带范围的数字字符串问题
嘿,刚好碰到过类似的需求,我来帮你搞定这个范围解析的问题!你已经搞定了纯数字的情况,现在只需要给每个元素加个「范围判断+展开」的逻辑就可以了。
核心思路
我们需要遍历拆分后的每个元素:
- 如果是带
-的范围字符串,就拆分成起始和结束数字,生成Ruby的范围对象再转成数组 - 如果是纯数字,直接转成整数
- 最后把所有结果扁平化合并,再排序就搞定了
完整代码示例
input = "1,3,6-8,5" result = input.split(",").flat_map do |item| if item.include?("-") # 拆分范围的起始和结束,转成整数后生成范围数组 start_num, end_num = item.split("-").map(&:to_i) (start_num..end_num).to_a else # 纯数字直接转整数 item.to_i end end.sort puts result.inspect # 输出 => [1, 3, 5, 6, 7, 8]
测试你的另一个例子
用你给的"12,3-5,2,6"测试:
input = "12,3-5,2,6" # 运行同样的代码后,result会是 [2, 3, 4, 5, 6, 12]
小补充
如果你的输入可能存在不合法的格式(比如"5-"或者"a-3"),可以额外加一些错误处理逻辑,比如判断拆分后的数字是否有效,但如果输入都是规范的数字/范围格式,上面的代码完全够用啦。
内容的提问来源于stack exchange,提问作者not2qubit
相关产品推荐
相关产品推荐

