gpt4 book ai didi

c# - 缩短一串数字

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

我有以下数字序列:

enter image description here

你可以看到那些数字很多。我想缩短那个字符串。假设字符串包含超过 20 个数字,它应该显示 18 个数字,然后是“...”,然后是序列的最后两个。

我可能可以通过在 List<int> 中添加这些数字来做到这一点或 HashSet<int> (在这种情况下,HashSet 可能会更快),但我认为它会很慢。

StringBuilder temp = new StringBuilder();

for (...)
{
temp.Append($"{number} ");
}

var sequence = temp.ToString();

我想要的例子:

7 9 12 16 18 21 25 27 30 34 36 39 43 45 48 52 54 57 ... 952 954

请注意,我只想要快速方法

最佳答案

这个版本比其他答案快大约 8 倍,并且只分配大约 6% 的内存。我认为您很难找到更快的版本:

static string Truncated(string input)
{
var indexOfEighteenthSpace = IndexOfCharSeekFromStart(input, ' ', 18);
if (indexOfEighteenthSpace <= 0) return input;

var indexOfSecondLastSpace = IndexOfCharSeekFromEnd(input, ' ', 2);
if (indexOfSecondLastSpace <= 0) return input;

if (indexOfSecondLastSpace <= indexOfEighteenthSpace) return input;

var leadingSegment = input.AsSpan().Slice(0, indexOfEighteenthSpace);
var trailingSegment = input.AsSpan().Slice(indexOfSecondLastSpace + 1);

return string.Concat(leadingSegment, " ... ", trailingSegment);

static int IndexOfCharSeekFromStart(string input, char value, int count)
{
var startIndex = 0;
for (var i = 0; i < count; i++)
{
startIndex = input.IndexOf(value, startIndex + 1);
if (startIndex <= 0) return startIndex;
}

return startIndex;
}

static int IndexOfCharSeekFromEnd(string input, char value, int count)
{
var endIndex = input.Length - 1;
for (var i = 0; i < count; i++)
{
endIndex = input.LastIndexOf(value, endIndex - 1);
if (endIndex <= 0) return endIndex;
}

return endIndex;
}
}

关于c# - 缩短一串数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745956/

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