将字符串转换为 int[]

Convert string to int[,]

我对矩阵聚类有奇怪的要求。

我的输入就像

string param = "1100,1110,0110,0001";

而我想要的是

 var matrix = new[,]
        {
              {1,1,0,0},
              {1,1,1,0},
              {0,1,1,0},
              {0,0,0,1}
        };

所以应该是int[4,4]数组。

我尝试了什么?

我为这次对话尝试了很多方法。

首先,我使用下面的代码将我的字符串转换为字符串[]。

string[] resultantArray = param.Split(',').ToArray(); 

然后我尝试使用以下代码将我的 string[] 转换为 int[]。

var intArray = resultantArray .Select(int.Parse).ToArray();

但我最终删除了前导零

有什么办法, 我可以从 string?

获得 int[4,4] 数组

你能试试这个吗

        string param = "1100,10110,0110,0001";   //"1100,1110,0110,0001";

        string[] allStrings = param.Split(',');
        var m = allStrings.Count();

        System.Collections.Generic.List<char[]> listOfCharArr = new System.Collections.Generic.List<char[]>();
        System.Collections.Generic.List<int> lengthList = new System.Collections.Generic.List<int>();
        for(int i = 0; i<m ; i++)
        {
            string str = allStrings[i];
            char[] allChars = str.ToCharArray();
            listOfCharArr.Add(allChars);
            lengthList.Add(allChars.Count());                
        }
        int maxLength = lengthList.Max();

        int[,] matrix = new int[m, maxLength] ;

        for(int i = 0; i<m ; i++)
        {
            for (int j = 0; j < maxLength; j++)
            {
                char[] temp = listOfCharArr[i];
                if (j < listOfCharArr[i].Count())
                    matrix[i, j] = Convert.ToInt32(listOfCharArr[i][j].ToString()); // you can use int.tryparse if not sure that input will always be integer
                else
                    matrix[i, j] = -1; // I have used -1 as no value, you can use whatever you require
            }
        }
            string param = "1100,1110,0110,0001";
            string[] resultantArray = param.Split(',').ToArray();

            int n = resultantArray.Count();
            int m = resultantArray[0].Length;
            var matrix = new int[n,m];

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    matrix[i, j] = Convert.ToInt32(resultantArray[i][j].ToString());
                }
            }

我已经修改了 Vandita 的答案并添加了一些来自 Santosh 的答案的代码。

我还检查了 resultantArray 的最大长度。

 string param = "1100,1110,0110,0001";
 string[] resultantArray = param.Split(',').ToArray();

  var max = resultantArray.OrderByDescending(s => s.Length).First();

  int n = resultantArray.Length;            
  int m = max.Length;

  var matrix = new int[n, m];

  for (int i = 0; i < resultantArray.Count(); i++)
  {
     string str = resultantArray[i];
     char[] allChars = str.ToCharArray();
     for (int j = 0; j < allChars.Count(); j++)
     {
          matrix[i, j] = Convert.ToInt32(allChars[j].ToString()); 
     }
  }

不过,我正在寻找更好的答案..

这是一个更动态的方法

string param = "1100,1110,0110,0001";
int[][] rJagged = param.Split(',').Select(x => x.Select(y => int.Parse(y.ToString())).ToArray()).ToArray();
int[,] result = new int[rJagged.Length, rJagged.Max(x => x.Length)];

for (int i = 0; i < rJagged.Length; i++)
{
    for (int j = 0; j < rJagged[i].Length; j++)
    {
        result[i, j] = rJagged[i][j];
    }
}

这应该是最快的方法

string param = "1100,1110,0110,0001";            
int[,] result = new int[4,4];
int i = 0, j = 0;

for (int x = 0; x < param.Length; x++)
{
    if (param[x] == ',')
    {
        i++;
        j = 0;
    }
    else
    {
        result[i, j] = param[x] - '0';
        j++;
    }
}