using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace ConsoleApplication31
{
class Program
{
public static Array ReturnArray()
{
string[,,] arr = new string[, , ];
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{ for (int k = ; k < ; k++)
{ arr[i, j, k] = i + "," + j + "," + k;
} } }
return arr; } private static Array GetJCSZ()
{
//string[][][] arr = new string[2][][];
//arr[0] = new string[2][];
//arr[0][0] = new string[3];//3
//arr[0][1] = new string[4];//4
//arr[0][0][0] = "0,0,0";
//arr[0][0][1] = "0,0,1";
//arr[0][0][2] = "0,0,2"; //arr[1] = new string[2][];
//arr[1][0] = new string[3];
//arr[1][1] = new string[4];
//arr[1][0][0] = "1,0,0";
//arr[1][0][1] = "1,0,1";
//arr[1][0][2] = "1,0,2"; //return arr; string[] arr = new string[];
arr[] = "";
arr[] = "";
return arr;
} public static void InitColumns(Array arr, ref Dictionary<string, DataColumn> dicCols, ref DataTable table)
{ for (int i = ; i < arr.Length; i++)
{ if ((arr as dynamic)[i] is Array)
{ InitColumns((arr as dynamic)[i], ref dicCols, ref table); }
else
{ if (arr.Length >= dicCols.Keys.Count)
{
dicCols.Clear();
for (int ii = ; ii < arr.Length; ii++)
{ string colName = Guid.NewGuid().ToString();
DataColumn col = new DataColumn(colName);
if (!dicCols.ContainsKey(colName))
{
dicCols.Add(colName, col); } } } } } } public static DataTable ArrayConvert2DataTable(Array arr)
{
DataTable tmpT = new DataTable();
Dictionary<string, DataColumn> dicCols = new Dictionary<string, DataColumn>();
Dictionary<string, DataRow> dicRows = new Dictionary<string, DataRow>();
//J=交 C=错
bool isJC = !(arr.GetType().Name.Contains(','));
//交错数组处理
if (isJC)
{
//交错数组第一个维度的元素个 DataTable table = new DataTable();
List<int> dims = new List<int>();
InitColumns(arr, ref dicCols, ref table);
foreach (var item in dicCols)
{
table.Columns.Add(item.Value);
}
int currRowIndex = ;
SearchTable(ref currRowIndex,arr,arr, ref table); return table; }
//多维数组处理
else
{ int rank = arr.Rank;
int cols = arr.GetLength(rank - ); for (int i = ; i < cols; i++)
{
DataColumn col = new DataColumn(Guid.NewGuid().ToString());
tmpT.Columns.Add(col);
} Dictionary<int, int> dims = new Dictionary<int, int>();
int currRowIndex = -;
Dictionary<int, DataRow> dicRow = new Dictionary<int, DataRow>();
var iterator = arr.GetEnumerator();
int count = ;
while (iterator.MoveNext())
{
var curr = iterator.Current;
if (count % cols == )
{
currRowIndex++;
DataRow dr = tmpT.NewRow();
tmpT.Rows.Add(dr);
dicRow.Add(currRowIndex, dr);
dr[] = curr.ToString();
if (count == cols)
{
count = ;
} }
else
{
tmpT.Rows[currRowIndex][count] = curr.ToString(); }
count++; } }
return tmpT;
} private static void SearchTable(ref int currRowIndex, Array ori, Array curr, ref DataTable table)
{ for (int i = ; i < curr.Length; i++)
{
bool isa = (curr as dynamic)[i] is Array;
if (isa)
{ SearchTable(ref currRowIndex, ori, (curr as dynamic)[i], ref table); }
else
{
if (table.Rows.Count < currRowIndex + )
{
DataRow newRow = table.NewRow();
table.Rows.Add(newRow);
} try
{
table.Rows[currRowIndex][i] = (curr as Array).GetValue(i);
}
catch (Exception)
{ ;
}
if (i == curr.Length - )
currRowIndex++; } } }
static void Main(string[] args)
{
var t1 = ArrayConvert2DataTable(ReturnArray()); var t2 = ArrayConvert2DataTable(GetJCSZ());
Console.ReadKey();
} } }

c# 多维数组、交错数组(转化为DataTable)的更多相关文章

  1. C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别

    多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3]; 或声明时即赋值 ...

  2. C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别 (转载)

    多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] , ]; 或声明时即赋值,由系统推断长度 int [,] test1 = { ...

  3. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

  4. C#中的数组,多维数组和交错数组

    想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...

  5. C#二维数组(矩形数组,交错数组)

    C# 支持一维数组.多维数组(矩形数组)和数组的数组(交错的数组) 1.多维数组 声明:string[,] names; 初始化:int[,] numbers = new int[3, 2] { {1 ...

  6. C#交错数组

    交错数组本质上是一维数组只不过这个一维数组里的元素都是数组.因为该一维数组里面的元素可以是任何大小的数组所以定义时只能以这样的格式定义 ][]; 定义完后必须对该数组进行初始化后方可进行赋值等操作否则 ...

  7. poj 1195:Mobile phones(二维树状数组,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14489   Accepted: 6735 De ...

  8. C# -- 交错数组的使用

    C# -- 交错数组的使用 交错数组是元素为数组的数组.交错数组元素的维度和大小可以不同.交错数组有时称为“数组的数组”. 1. 举例一:子数组是长度相同的一维数组 static void Main( ...

  9. poj1195(二维树状数组)

    题目链接:https://vjudge.net/problem/POJ-1195 题意:有s*s的矩阵,初始化为全0,有两种操作,单点修改(x,y)的值,区间查询(x,y)的值(l<=x< ...

随机推荐

  1. maxsigma

    10^8 768 10^7 448 10^6 240 10^5 128

  2. gradle wrapper 简单使用

    其实就是对于gradle 的一个包装,保证了项目版本的一致,同时减少配置   1. 生成wrapper // 使用gradle wrapper 命令 gradle wrapper 输出效果如下: [r ...

  3. C# 实现程序只启动一次(总结)

    我前面的三篇文章是从网上找到的(如下链接),都说是实现程序只启动一次的功能. C#防止程序多次运行C#检测程序重复运行的函数(可以在多用户登录情况下检测)C# 实现程序只启动一次(多次运行激活第一个实 ...

  4. android中asynctask的使用实例

    参考此blog写的非常的好http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html MainActivity.java imp ...

  5. erlang的tcp服务器模板

    改来改去,最后放github了,贴的也累,蛋疼 还有一个tcp批量客户端的,也一起了 大概思路是 混合模式 使用erlang:send_after添加recv的超时处理 send在socket的opt ...

  6. Java-Runoob:Java switch case

    ylbtech-Java-Runoob:Java switch case 1.返回顶部 1. Java switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等 ...

  7. 七 Kafka Streams VS Consumer API

    1 kafka Streams:   概念: 处理和分析储存在Kafka中的数据,并把处理结果写回Kafka或发送到外部系统的最终输出点,它建立在一些很重要的概念上,比如事件时间和消息时间的准确区分, ...

  8. maven学习5 构建MyBatis项目

    2. 修改pom.xml,添加MyBatis依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=& ...

  9. jgrid相关功能用法记录

    1.获取行号var ids = $gridList.jqGrid('getGridParam', 'selarrrow'); //多选,返回选中行号组字符 var ids2 = $gridList.j ...

  10. MySQL 性能测试经验

    一.背景 近期在进行资源调度管理平台的重构工作,其中的Resource/Property数据库设计,在没有更加优化的方案前,打算沿用当前平台的数据库结构:这就需要对当前平台的数据库结构进行剖析研究,并 ...