将字符串转换为int [,]

时间:2017-03-31 05:58:57

标签: c# matrix-multiplication hierarchical-clustering

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

我的输入就像

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]数组

5 个答案:

答案 0 :(得分: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
            }
        }

答案 1 :(得分:2)

            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());
                }
            }

答案 2 :(得分:1)

这是一种更具动态性的方法

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];
    }
}

答案 3 :(得分:0)

这应该是最快的方法

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++;
    }
}

答案 4 :(得分:-1)

我修改了Vandita的答案,并从Santosh的答案中添加了一些代码。

我还检查了最终的结果阵列。

 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()); 
     }
  }

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