我想逐行打印所有数据,其中每行包含“n”个数字,n是用户定义的。 类似的东西:
void Print(List<int> list, int charactersPerLine)
{
// TODO: magic here
}
用法
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 }
Print(list, 4);
期望的输出:
1234
5678
到目前为止,我试过了:
List.AddRange(array);
List.Add(array2);
List.Add(array3);
foreach (int i in List)
{
Console.Write("{0}", i);
}
当循环写入控制台时,List<int>
中的所有内容都写成一行,输出如下:
12345678
这可能吗?
答案 0 :(得分:3)
使用:
foreach (int i in List)
{
Console.WriteLine("{0}", i);
}
如果您的输入采用{1,2,3,4,5,6,7,8}
格式,则必须使用某些条件何时使用Console.WriteLine()
或Console.Write()
const int LineCharacterLimit = 4;
int i = 0;
foreach (int i in List)
{
i++;
if (i == LineCharacterLimit)
{
Console.WriteLine("{0}", i);
i=0;
}
else
{
Console.Write("{0}", i);
}
}
答案 1 :(得分:0)
您可以先使用String Builder。然后在每一行之后加上\n
。
StringBuilder str = new StringBuilder();
int count = 1;
foreach (int i in List)
{
str.Append(i.ToString());
if(count%4 ==0)
str.Append("\n");
count++;
}
Console.Write(str.ToString());
答案 2 :(得分:0)
更通用的版本:
static class LinqExtensions
{
public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> source, int batchSize)
{
int currentBatchSize = 0;
List<T> batch = new List<T>();
foreach (var e in source)
{
batch.Add(e);
if (++currentBatchSize % batchSize == 0)
{
yield return batch;
batch.Clear();
}
}
yield return batch;
}
}
我确信您可以在morelinq
包中找到类似的内容。
用法:
static void Print(List<int> list, int charactersPerLine)
{
foreach (var batch in list.Batch(charactersPerLine))
{
var strBatch = batch.Select(e => e.ToString()).ToArray();
Console.WriteLine(string.Join(",", strBatch));
}
}