我有一个我在下面创建的数据表,我需要在数据表中列出所有行的单元格长度。我的结果必须不包括“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 :(得分:0)
除非我误解了你想要完成的任务,否则问题在于你如何声明mySortedLists数组。你希望它像这样声明:
int[] mySortedLists = new int[table.Rows.Count];
要查看数组的长度,可以使用
Console.WriteLine(mySortedLists.Length);
答案 1 :(得分: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;
答案 2 :(得分: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);