2014-02-25 53 views
2

我想要逐行打印所有數據,其中每行包含「n」個數字,n是用戶定義的。 喜歡的東西:在foreach循環中分割列表以在每次迭代中添加新行

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 

這可能嗎?

+6

使用'Console.WriteLine()'。 –

+0

在「{0}」之後放置回車符。所以''{0} \ n「'。 –

+0

Downvote,有人嗎? –

回答

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); 
    } 
} 
+0

然後問題是我得到每行一個數字? – user3352356

0

你可以先使用字符串構建。然後在每行後面放一個\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()); 
+0

你可以使用str。AppendLine()而不是Append(「\ n」) –

+0

嗯,試過這個沒有快樂:(這已經讓我瘋狂了幾個小時lol – user3352356

+0

有人在學校早些時候對我說過,如果我用課程,那麼我可以對待所有不同的數組是唯一的,然後寫入控制檯,將它們分開處理,因此,writeline將是Console.WriteLine(「{0} {1} {2}」,i.array,i.array2,i.array3);但是我不知道該怎麼做,我知道如何創建一個班級,但不知道該怎麼做。 – user3352356

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)); 
    } 
} 
相關問題