【发布时间】:2022-02-21 07:55:06
【问题描述】:
我正在尝试将数百个整数的List<int> 转换为一个字符串,该字符串在打印时每行具有指定数量的整数。我还在输出中的每个整数之间放置了“,”,并放置了左括号和右括号。如果 List 的 Count 不是每行项目数的倍数,则最后一行的项目数少于前一行。例如,如果 List 有 49 个整数,并且调用该方法在每行放置 11 个项目,则输出字符串在打印时将如下所示:
[3397, 3398, 3401, 3403, 3409, 3415, 3418, 3419, 3421, 3427, 3431,
3437, 3439, 3442, 3443, 3446, 3453, 3455, 3459, 3466, 3473, 3481,
3482, 3487, 3489, 3493, 3494, 3497, 3503, 3505, 3506, 3513, 3518,
3521, 3523, 3543, 3545, 3551, 3554, 3561, 3563, 3566, 3569, 3574,
3578, 3579, 3587, 3589, 3595]
我已经编写了一个执行此操作的方法,并且输出看起来很棒,但我觉得我的代码可能遇到了意大利面条/jank 问题。有没有更好的方法来做到这一点,使用更少的代码行并使用 StringBuilder 而不是字符串连接?
public static string MakeBigStringFromList(List<int> input,
int itemsPerLine)
{
int length = input.Count;
List<int>.Enumerator intEnumerator = input.GetEnumerator();
string bigReturnString = "[";
if (length > 0)
{
intEnumerator.MoveNext();
bigReturnString += intEnumerator.Current.ToString();
if (length > 1)
{
bigReturnString += ", ";
}
}
int firstTime = 1;
int i = 1;
while (i < length)
{
string line = "";
int j = 0 + firstTime;
if (i + itemsPerLine < length)
{
while (j < itemsPerLine)
{
intEnumerator.MoveNext();
line += intEnumerator.Current.ToString() + ", ";
i++;
j++;
}
bigReturnString += line + "\n";
firstTime = 0;
}
else
{
while (i < (length - 1))
{
intEnumerator.MoveNext();
line += intEnumerator.Current.ToString() + ", ";
i++;
}
intEnumerator.MoveNext();
line += intEnumerator.Current.ToString();
i++;
bigReturnString += line;
intEnumerator.Dispose();
}
}
bigReturnString += "]";
return bigReturnString;
}
【问题讨论】:
标签: c# string list stringbuilder enumeration