C# 4.0 需要将数字符号的范围转换为逗号分隔的值吗?
我的意见是C# 4.0 需要将数字符号的范围转换为逗号分隔的值吗?,c#-4.0,C# 4.0,我的意见是 string PageRange = "1,2-5,9"; 我需要把它们转换成 string TotalRange = "1,2,3,4,5,9"; 请分享您的想法。非LINQ解决方案:以下方法处理输入字符串并用数字序列替换范围: static IEnumerable<int> RangeToSequence(string input) { string[] parts = input.Split(','); foreach (
string PageRange = "1,2-5,9";
我需要把它们转换成
string TotalRange = "1,2,3,4,5,9";
请分享您的想法。非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++;
}
}
}
Linq解决方案:您可以仅使用start将简单数字视为范围。因此,您可以使用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);
列表结果=新列表();
字符串PageRange=“1,2-5,9”;
var strings=PageRange.Split(',');
foreach(字符串中的变量s)
{
var split=s.split('-');
if(split.Count()==1)
{
结果。添加(s);
持续
}
对于(int i=int.Parse(split[0]),iTry
精彩的回答..这也是最好的答案;):)thanxs@lazyberezovsky如果列表中有负数,您如何使用linq?例如:string PageRange=“-1,2-5,9”;
。不是我的否决票,但我看到您重新分配了结果,而不是向其添加新的数字。此外,您正在内存中创建三个数组,很难读取项的部分。拆分('-')[I]
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);
List<string> result = new List<string>();
string PageRange = "1,2-5,9";
var strings = PageRange.Split(',');
foreach (var s in strings)
{
var split = s.Split('-');
if (split.Count() == 1)
{
result.Add(s);
continue;
}
for (int i = int.Parse(split[0]); i <= int.Parse(split[1]); i++)
{
result.Add(i.ToString());
}
}
var result = "";
var aray = PageRange.Split(',').ToArray();
foreach (var item in aray)
{
if (item.IndexOf('-') != -1)
{
var splitparts = item.Split('-');
result= Enumerable.Range(Convert.ToInt32(item.Split('-')[0]), (Convert.ToInt32(item.Split('-')[1]) - Convert.ToInt32(item.Split('-')[0]))).Aggregate((a, b) => a.ToString() + "," + b.ToString());
}
if (result.Equals(""))
{
result = item;
}
else
{
result += "," + item;
}
}