gpt4 book ai didi

c# - 一种将字符串排序为另一个字符串的更简洁的方法

转载 作者:行者123 更新时间:2023-11-30 19:43:50 25 4
gpt4 key购买 nike

我有一个可能看起来像这样的字符串:“3, 7, 12-14, 1, 5-6”

我需要做的是将其更改为如下所示的字符串:“1, 3, 5, 6, 7, 12, 13, 14”

我已经使以下代码工作,但我非常感谢帮助如何用更少的代码行以更清晰的方式做到这一点:

private string sortLanes(string lanesString)
{
List<string> sortedLanes = new List<string>();

if (lanesString.Contains(',') || lanesString.Contains('-'))
{
List<string> laneParts = lanesString.Split(',').ToList();

foreach (string lanePart in laneParts)
{
if (lanePart.Contains('-'))
{
int splitIndex = lanePart.IndexOf('-');
int lanePartLength = lanePart.Length;

int firstLane = Convert.ToInt32(lanePart.Substring(0, splitIndex));
int lastLane = Convert.ToInt32(lanePart.Substring(splitIndex + 1, lanePartLength - splitIndex - 1));
while (firstLane != lastLane)
{
sortedLanes.Add(firstLane.ToString().Trim());
firstLane++;
}
sortedLanes.Add(lastLane.ToString());
}
else
{
sortedLanes.Add(lanePart.Trim());
}
}
sortedLanes.Sort();
sortedLanes = sortedLanes.OrderBy(x => x.Length).ToList();

lanesString = "";
foreach (string lane in sortedLanes)
{
if (lanesString.Length == 0)
{
lanesString = lane;
}
else
{
lanesString = lanesString + ", " + lane;
}
}
}
else
{
return lanesString;
}
return lanesString;
}

最佳答案

我会先按 , 拆分,然后将每个值转换为单个整数或所需的范围。获取结果并对它们重新排序,然后连接回一个字符串。像这样。

    string test = "3, 7, 12-14, 1, 5-6";
var items = test.Split(',');
var ints = items.SelectMany(item => Expand(item));
string result = string.Join(", ", ints.OrderBy(i => i).ToArray());


private static IEnumerable<int> Expand(string str)
{
if (str.Contains('-'))
{
var range = str.Split('-');
int begin = int.Parse(range[0]);
int end = int.Parse(range[1]);
for (int i = begin; i <= end; i++)
yield return i;
}
else
yield return int.Parse(str);
}

当然你可能想添加一些错误检查,但我会把它留给你。

关于c# - 一种将字符串排序为另一个字符串的更简洁的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13823433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com