zoukankan      html  css  js  c++  java
  • c# 多维数组、交错数组(转化为DataTable)

    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[2, 3, 4];
                for (int i = 0; i < 2; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
    
                        for (int k = 0; k < 4; 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[3];
                arr[0] = "0";
                arr[2] = "2";
                return arr;
            }
          
    
            public static void InitColumns(Array arr, ref Dictionary<string, DataColumn> dicCols, ref DataTable table)
            {
    
                for (int i = 0; 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 = 0; 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 = 0;
                    SearchTable(ref currRowIndex,arr,arr,  ref table);
    
                    return table;
    
                }
                //多维数组处理
                else
                {
    
                    int rank = arr.Rank;
                    int cols = arr.GetLength(rank - 1);
    
                    for (int i = 0; i < cols; i++)
                    {
                        DataColumn col = new DataColumn(Guid.NewGuid().ToString());
                        tmpT.Columns.Add(col);
                    }
    
                    Dictionary<int, int> dims = new Dictionary<int, int>();
                    int currRowIndex = -1;
                    Dictionary<int, DataRow> dicRow = new Dictionary<int, DataRow>();
                    var iterator = arr.GetEnumerator();
                    int count = 0;
                    while (iterator.MoveNext())
                    {
                        var curr = iterator.Current;
                        if (count % cols == 0)
                        {
                            currRowIndex++;
                            DataRow dr = tmpT.NewRow();
                            tmpT.Rows.Add(dr);
                            dicRow.Add(currRowIndex, dr);
                            dr[0] = curr.ToString();
                            if (count == cols)
                            {
                                count = 0;
                            }
    
                        }
                        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 = 0; 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 + 1)
                        {
                            DataRow newRow = table.NewRow();
                            table.Rows.Add(newRow);
                        }
    
                        try
                        {
                            table.Rows[currRowIndex][i] = (curr as Array).GetValue(i);
                        }
                        catch (Exception)
                        {
    
                            ;
                        }
                        if (i == curr.Length - 1)
                            currRowIndex++;
    
                    }
                     
                }
    
    
    
    
    
    
    
            }
            static void Main(string[] args)
            {
                var t1 = ArrayConvert2DataTable(ReturnArray());
    
                var t2 = ArrayConvert2DataTable(GetJCSZ());
                Console.ReadKey();
            }
    
    
        }
    
    }
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/kexb/p/5533279.html
Copyright © 2011-2022 走看看