我对矩阵聚类有很奇怪的要求。
我的输入就像
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]数组答案 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());
}
}
不过,我正在寻找更好的答案..