Lua中处理含数值范围的字符串:分割并展开连续数值数组
如何展开包含数值范围的字符串为连续数值数组?
你已经搞定了逗号分割这一步,接下来只需要对每个项做判断:如果是单个数字就直接转成数值加入结果,如果是带-的范围,就把它拆成起始和结束值,生成中间所有连续数字就行。
Python 实现示例
example = "1,3,4-7,9,13-17" result = [] # 按逗号分割得到单个项 items = example.split(',') for item in items: if '-' in item: # 拆分范围的起始和结束值,转成整数 start, end = map(int, item.split('-')) # 生成从start到end的所有数(range左闭右开,所以end要+1) result.extend(range(start, end + 1)) else: # 单个数字直接转整数加入结果 result.append(int(item)) print(result) # 输出结果: [1, 3, 4, 5, 6, 7, 9, 13, 14, 15, 16, 17]
JavaScript 实现示例
如果你用JS处理,思路是一样的:
const example = "1,3,4-7,9,13-17"; const result = []; const items = example.split(','); items.forEach(item => { if (item.includes('-')) { // 拆分并转换为数字类型 const [start, end] = item.split('-').map(Number); // 循环生成从start到end的所有数(包含end) for (let i = start; i <= end; i++) { result.push(i); } } else { result.push(Number(item)); } }); console.log(result); // 输出结果: [1, 3, 4, 5, 6, 7, 9, 13, 14, 15, 16, 17]
关键注意点
- 处理范围时要确保包含结束值:Python的
range是左闭右开的,所以需要写range(start, end + 1);JavaScript的循环直接用i <= end就能包含结束值。 - 记得把字符串形式的数字转换成数值类型,避免后续出现字符串拼接的问题。
内容的提问来源于stack exchange,提问作者Mark Munsterman
相关产品推荐
相关产品推荐

