Jeff_M 发表于 2022-1-5 17:42:41

范围字符串到数组

我有一个字符串扩展方法,可以将范围内的数字字符串(如“1-25,36,45,50-100”)转换为包含范围内所有数字的整数数组。多年来,它一直运行良好,但是我现在需要它来处理比标准整数大得多的uint数。这意味着
公共静态uint[]RangedStringToArray(此字符串值)
{
var result=value.Split(',')
。选择(x=>x.Split(“-”)
。选择(p=>new{First=uint.Parse(p.First()),Last=uint.Parse(p.Last())})
.SelectMany(x=>可枚举范围(x.First,x.Last-x.first1+1))
.OrderBy(z=>z)
返回结果。ToArray
()
}
x.Split ('-'))。
,选择(p=>new{First=uint.Parse(p.First()),last=uint.Parse(p.Last ()) })。
. Select众多(x=>GetUIntRange(x.First,x.Last-x.First+1))。
,OrderBy(z=>z);。
返回result.ToArray();。
}。

静态无效主(字符串[]参数)。
{。
var range=RangedStringToArray("1-25,36,45,50-100");。
foreach(范围内的var项目)。
Console.WriteLine(项目);。
Console.ReadLine();。
}。
}。
}。

Jeff_M 发表于 2022-1-5 18:25:57

My 2 cents public static uint[] RangedStringToArray(此字符串值)。
{。
变量结果 = 值,斯普利特(',')。
,Select(x => x.Split('-'))。
,Select(p => new { First = uint.Parse(p.First()), Last = uint.Parse(p.Last()) })。
,SelectMany(x => Range(x.First, x.Last))。
,OrderBy(z => z);。
返回结果,ToArray();。
}。

公共静态 I枚举范围(uint start, uint end)。
{。
if (end 。
for (uint i = start; i 。
收益率回报 i;。
}。

gile 发表于 2022-1-5 22:45:04

F#太好玩了:    type String with 。
成员字符串,RangedStringToArray =。
字符串,拆分(',')。
| > array . map(fun s-> s . Split('-'))。
| > array . collect(fun a->[| uint 32,解析(a.)..UInt32,parse(a .)|])    > "1-5,36,45,50-53".RangedStringToArray;;
val it : uint32 [] = [|1u; 2u; 3u; 4u; 5u; 36u; 45u; 50u; 51u; 52u; 53u|]。

gile 发表于 2022-1-6 02:36:47

谢谢很多人,非常感谢!

Jeff_M 发表于 2022-1-6 03:10:51


你是个有趣的人,丹尼尔
页: [1]
查看完整版本: 范围字符串到数组