在foreach循环中拆分列表以在每次迭代时添加新行

时间:2014-02-25 22:50:54

标签: c# list foreach

我想逐行打印所有数据,其中每行包含“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

这可能吗?

3 个答案:

答案 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));
    }
}