将字符串转换为 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++;
}
}
我对矩阵聚类有奇怪的要求。
我的输入就像
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++;
}
}