如何二维字符串数组转换为2D [INT,双,布尔,..]数组? [英] How to convert 2D string array to 2D [int, double, bool, ..] array?

查看:204
本文介绍了如何二维字符串数组转换为2D [INT,双,布尔,..]数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标就是这些了。<​​/ P>


  1. 转换数据类字典。

  2. 保存/载入字典/从TXT,数据库等。

  3. 转换字典数据类

我想我解决了alomost,但有一个问题还是remail。

问题是转换二维字符串数组至2d它的原始数据类型阵列

我已经成功将字符串转换为原始数据类型。
像这样

 公共静态无效SetFieldValue(目标对象,字段信息字段信息,字符串值)
    {
        字符串的字段类型= fieldInfo.FieldType.Name;
        字段类型= fieldType.ToLower();        开关(字段类型)
        {
            案布尔:
                布尔B:
                fieldInfo.SetValue(目标,bool.TryParse(价值,走出二)B:假);
                打破;            案INT32:
                INT N;
                fieldInfo.SetValue(目标,int.TryParse(值,N个)N:0);
                打破;            案例双:
                双D;
                fieldInfo.SetValue(目标,double.TryParse(值,输出D)D:0);
                打破;            案串:
                fieldInfo.SetValue(目标价值);
                打破;
        }
    }

我已经成功转换的一维字符串数组至1d原始数据类型的数组。
像这样

 公共静态无效SetFieldValue(目标对象,字段信息字段信息,字符串[] ARR)
    {
        字符串的字段类型= fieldInfo.FieldType.Name;
        字段类型= fieldType.ToLower();
        字段类型= fieldType.Replace([],);        开关(字段类型)
        {
            案布尔:
                布尔B:
                布尔[] = arr_b Array.ConvertAll(ARR,S = GT; bool.TryParse(S,OUT B)B:假);
                fieldInfo.SetValue(目标,arr_b);
                打破;            案INT32:
                INT N;
                INT [] = arr_n Array.ConvertAll(ARR,S = GT; int.TryParse(S,N个)N:0);
                // INT [] = arr_n1 Array.ConvertAll(ARR,int.Parse);
                // INT [] = arr_n2 arr.Select(S = GT; int.TryParse(S,N个)N:0).ToArray();
                fieldInfo.SetValue(目标,arr_n);
                打破;            案例双:
                双D;
                双[] = arr_d Array.ConvertAll(ARR,S = GT; double.TryParse(S,输出D)D:0);
                fieldInfo.SetValue(目标,arr_d);
                打破;            案串:
                fieldInfo.SetValue(目标,ARR);
                打破;
        }
    }

不过,我应该怎么办时,手柄二维数组?

 公共静态无效SetFieldValue(目标对象,字段信息字段信息,字符串[,] ARR)
    {
        字符串的字段类型= fieldInfo.FieldType.Name;
        字段类型= fieldType.ToLower();
        字段类型= fieldType.Replace([,],);        INT N;
        双D;
        布尔B:
        开关(字段类型)
        {
            案布尔:
                //布尔[] = arr_b Array.ConvertAll(ARR,S = GT; bool.TryParse(S,OUT B)B:假);
                //fieldInfo.SetValue(target,arr_b);
                打破;            案INT32:
                // INT [,] arr_n = Array.ConvertAll(ARR,S = GT; int.TryParse(S,N个)N:0);
                //fieldInfo.SetValue(target,arr_n);
                打破;            案例双:
                //双[,] arr_d = Array.ConvertAll(ARR,S = GT; double.TryParse(S,输出D)D:0);
                //fieldInfo.SetValue(target,arr_d);
                打破;            案串:
                fieldInfo.SetValue(目标,ARR);
                打破;
        }
    }

和,我需要解决这个问题,是因为我无法得到的阵列位置的GetType()。getfield命令。我放弃了得到数组[行,列]数组[n_th,m_th]的getfield命令。


解决方案

最简单的方法是只在阵列上循环:

 字符串[,]字符串=新的字符串[,] {{1,2,3},{4,5,6 }};
INT [,]整数=新INT [strings.GetLength(0),strings.GetLength(1)];的for(int i = 0; I&LT; strings.GetLength(0);我++)
{
    为(中间体J = 0; J&下; strings.GetLength(1); J ++)
    {
        int.TryParse(字符串[I,J],出整数[I,J]);
    }
}

My Goal is these.

  1. convert data class to dictionary.
  2. save/load that dictionary to/from txt, database, etc.
  3. convert dictionary to data class

I think I solved alomost, but one problem still remail.

the problem is that convert 2d string array to 2d it's original datatype array.

I have succeeded convert string to original datatype. like this

    public static void SetFieldValue(Object target, FieldInfo fieldInfo, string value)
    {
        string fieldType = fieldInfo.FieldType.Name;
        fieldType = fieldType.ToLower();

        switch (fieldType)
        {
            case "boolean":
                bool b;
                fieldInfo.SetValue(target, bool.TryParse(value, out b) ? b : false);
                break;

            case "int32":
                int n;
                fieldInfo.SetValue(target, int.TryParse(value, out n) ? n : 0);
                break;

            case "double":
                double d;
                fieldInfo.SetValue(target, double.TryParse(value, out d) ? d : 0);
                break;

            case "string":
                fieldInfo.SetValue(target, value);
                break;
        }
    }

I have succeeded convert 1d string array to 1d original datatype array. like this

    public static void SetFieldValue(Object target, FieldInfo fieldInfo, string[] arr)
    {
        string fieldType = fieldInfo.FieldType.Name;
        fieldType = fieldType.ToLower();
        fieldType = fieldType.Replace("[]", "");

        switch (fieldType)
        {
            case "boolean":
                bool b;
                bool[] arr_b = Array.ConvertAll(arr, s => bool.TryParse(s, out b) ? b : false);
                fieldInfo.SetValue(target, arr_b);
                break;

            case "int32":
                int n;
                int[] arr_n = Array.ConvertAll(arr, s => int.TryParse(s, out n) ? n : 0);
                //int[] arr_n1 = Array.ConvertAll(arr, int.Parse);
                //int[] arr_n2 = arr.Select(s => int.TryParse(s, out n) ? n : 0).ToArray();
                fieldInfo.SetValue(target, arr_n);
                break;

            case "double":
                double d;
                double[] arr_d = Array.ConvertAll(arr, s => double.TryParse(s, out d) ? d : 0);
                fieldInfo.SetValue(target, arr_d);
                break;

            case "string":
                fieldInfo.SetValue(target, arr);
                break;
        }
    }

but, what should i do when handle 2D array?

    public static void SetFieldValue(Object target, FieldInfo fieldInfo, string[,] arr)
    {
        string fieldType = fieldInfo.FieldType.Name;
        fieldType = fieldType.ToLower();
        fieldType = fieldType.Replace("[,]", "");

        int n;
        double d;
        bool b;
        switch (fieldType)
        {
            case "boolean":
                //bool[] arr_b = Array.ConvertAll(arr, s => bool.TryParse(s, out b) ? b : false);
                //fieldInfo.SetValue(target, arr_b);
                break;

            case "int32":
                //int[,] arr_n = Array.ConvertAll(arr, s => int.TryParse(s, out n) ? n : 0);
                //fieldInfo.SetValue(target, arr_n);
                break;

            case "double":
                //double[,] arr_d = Array.ConvertAll(arr, s => double.TryParse(s, out d) ? d : 0);
                //fieldInfo.SetValue(target, arr_d);
                break;

            case "string":
                fieldInfo.SetValue(target, arr);
                break;
        }
    }

and, what i need to solve this problem is because I can't get GetType().GetField of array position. I gave up to get GetField of array[n_th,m_th] of array[row,col].

解决方案

The easiest way is to just loop over the array:

string[,] strings = new string[,] { { "1", "2", "3" }, { "4", "5", "6" } };
int[,] ints = new int[strings.GetLength(0), strings.GetLength(1)];

for (int i = 0; i < strings.GetLength(0); i++)
{
    for (int j = 0; j < strings.GetLength(1); j++)
    {
        int.TryParse(strings[i, j], out ints[i, j]);
    }
}

这篇关于如何二维字符串数组转换为2D [INT,双,布尔,..]数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆