我的意见是
string PageRange = "1,2-5,9";
Run Code Online (Sandbox Code Playgroud)
我需要将它们转换成
string TotalRange = "1,2,3,4,5,9";
Run Code Online (Sandbox Code Playgroud)
请分享您的想法.
非LINQ解决方案:以下方法处理输入字符串并用数字序列替换范围:
static IEnumerable<int> RangeToSequence(string input)
{
string[] parts = input.Split(',');
foreach (var part in parts)
{
if (!part.Contains('-')) // simple number, just return it
{
yield return Int32.Parse(part);
continue;
}
// otherwise we have range
string[] rangeParts = part.Split('-');
int start = Int32.Parse(rangeParts[0]);
int end = Int32.Parse(rangeParts[1]);
while (start <= end)
{
yield return start;
start++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以创建字符串:
var result = String.Join(",", RangeToSequence(PageRange));
Run Code Online (Sandbox Code Playgroud)
Linq解决方案:您可以将简单数字视为仅限启动的范围.因此,您可以使用SelectMany从每个部分中选择范围:
var numbers = from part in PageRange.Split(',')
let range = part.Split('-')
let start = Int32.Parse(range[0])
let end = Int32.Parse(range[range.Length - 1])
from i in Enumerable.Range(start, end - start + 1)
select i;
string result = String.Join(",", numbers);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |