【发布时间】:2013-04-04 13:48:40
【问题描述】:
我有一堆 DataTables 需要转换为 object[,] 数组(不是 object[][] 数组)。就性能而言,最有效的方法是什么?
我知道我可以通过最初构建我的object[dt.Rows.Count, dt.Columns.Count] 来做到这一点,然后遍历行并将每一行解析到数组中的一个位置,但我相当确定还有其他方法,例如使用 Linq 或 System.Data- dataRow.ToItemArray() 等特定功能可能更有效。
我的DataTables 大小可变,除了字符串之外,还包含需要适当格式化的日期和数字。
例如,如果我的一个数据表包含
ID 名称 日期 值 1 雷切尔 2013 年 1 月 1 日 00:00:00 100.0000 2 约瑟夫 2012 年 3 月 31 日 00:00:00 50.0000 3 莎拉 2/28/2013 00:00:00 75.5000然后我想要一个 object[,] 数组,其中包含完全相同的数据(最好带有标题),但带有格式化的日期和值
arr[x,0] = row[x].Field<int>("Id");
arr[x,1] = row[x].Field<string>("Name");
arr[x,2] = row[x].Field<DateTime>("Date").ToString("M/d/yy");
arr[x,3] = row[x].Field<decimal>("Value").ToString("C2"); // Currency format
【问题讨论】:
-
使用 LINQ 并不能神奇地加快速度。
-
通过“更高效”,您是否希望提高算法的时间复杂度(如 O(n^2) 到 O(n)),或者只是一个常数因子改进?
-
为什么不在帖子中包含“之前”和“之后”数据?
-
@SteveWellens 当然,已添加
-
"converted to object[,]" "包含需要适当格式化的日期和数字" 这很令人困惑,如果你有一个对象数组,你就不会得到格式化。您是否希望将所有内容都转换为格式化的字符串,然后再转换为对象?我想你会手工编码这些东西。