2010-06-19 76 views
-1

我有一個我在下面創建的數據表,我需要列出數據表中的所有行的單元格長度。我的結果必須不包含「0」值。但是我的名單:19,19,19,19,19,0.0.0.0..0.0 .....等等爲什麼呢?我怎樣才能看到我的陣列的長度?如何從數據表的整個單元格中填充我的數組?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace DataTables 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable table = GetTable(); 
      int[] mySortedLists = new int[table.Rows.Count*table.Columns.Count]; 
      foreach (DataColumn dc in table.Columns) 
      { 
       foreach (DataRow dr in table.Rows) 
       { 
        Console.WriteLine(dr[dc].ToString().Length); 
       } 
       Console.WriteLine("\t"); 
      } 

      Console.WriteLine("--------------------------------------"); 

      for (int i = 0; i < table.Rows.Count; i++) 
      { 
       for (int j = 0; j < table.Columns.Count; j++) 
       { 
        mySortedLists[i] += table.Rows[i][j].ToString().Length; 
       } 
      } 

      foreach (var mySortedList in mySortedLists) 
      { 
       Console.WriteLine(mySortedList.ToString() + "\n"); 
      } 

      Console.ReadKey(); 
     } 

     static DataTable GetTable() 
     { 
      // 
      // Here we create a DataTable with four columns. 
      // 
      DataTable table = new DataTable(); 
      table.Columns.Add("Dosage", typeof(int)); 
      table.Columns.Add("Drug", typeof(string)); 
      table.Columns.Add("Patient", typeof(string)); 
      table.Columns.Add("Date", typeof(DateTime)); 

      // 
      // Here we add five DataRows. 
      // 
      table.Rows.Add(25, "Indocin", "David", DateTime.Now); 
      table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); 
      table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); 
      table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); 
      table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); 

      return table; 
     } 
    } 
} 

請幫幫我!

回答

0

您聲明mySortedLists有長度table.Rows.Count * table.Columns.Count可以使用,但只使用第一個table.Rows.Count項。如果你想每行一個長度值,那麼你可能想:

int[] mySortedLists = new int[table.Rows.Count]; 

或者,如果你想每單元一個長度值,那麼你要麼需要一個二維數組:

int[,] mySortedLists = new int[table.Rows.Count, table.Columns.Count]; 
... 
mySortedLists[i, j] += table.Rows[i][j].ToString().Length; 

或者你想扁平化數組索引:

mySortedLists[i * table.Columns.Count + j] += table.Rows[i][j].ToString().Length; 
+0

不,我需要每行的細胞.... – Penguen 2010-06-20 10:49:25

0

除非我誤解了你要完成的任務,否則你的問題在於你如何聲明mySortedLists數組。你想讓它宣佈它是這樣的:

int[] mySortedLists = new int[table.Rows.Count]; 

要查看數組的長度,

Console.WriteLine(mySortedLists.Length); 
0

,如果你想獲得每行的每一行中每個單元的各個長度的細胞,或總長度我不能告訴。您的數組聲明的長度將支持後一種情況,但您只爲前一種情況分配值。這裏有兩個Linq方法來獲取存儲的長度值,第一個是將長度放入一個具有每個字段長度的鋸齒狀數組中。

int[][] lengths; 

using (DataTable table = GetTable()) 
{ 
    lengths = (from DataRow row in table.Rows 
       select 
       (from DataColumn col in table.Columns 
       select row[col].ToString().Length).ToArray()).ToArray(); 
} 

foreach (int[] row in lengths) 
{ 
    Console.WriteLine(string.Join(",", row)); 
} 

第二開始相同的,但是在執行在第一.ToArray()是前端部的聚集,所以它得到每個單獨的行,並將其存儲的總長度在陣列中。

int[] array; 

using (DataTable table = GetTable()) 
{ 
    array = (from DataRow row in table.Rows 
       select 
       (from DataColumn col in table.Columns 
       select row[col].ToString().Length).Sum()).ToArray(); 
} 

foreach (int value in array) 
    Console.WriteLine(value); 
+0

Console.WriteLine(的string.join( 「」 行長度值..。..有無效的參數發生? – Penguen 2010-06-20 06:59:48

+0

@Phsika中,這是有效的.NET 4.在3.5的地方,你可以做一些像Console.WriteLine(string.Join(「,」,row.Select(i => i.ToString())。ToArray()));' – 2010-06-20 07:08:33

相關問題