【发布时间】:2020-11-03 11:57:20
【问题描述】:
【问题讨论】:
-
您想要的输出是二维数组吗?第一个条目是包含值
1,2,3,4,5的数组,第二个条目是2,2,2,2,2?
标签: c#
【问题讨论】:
1,2,3,4,5 的数组,第二个条目是 2,2,2,2,2?
标签: c#
您可以将结果作为字符串与row 提到的预期结果一样
string input = "1;2;3;4;5;2;2;2;2;2;3;3;3;3;3;4;4;4;4;4;5;5;5;5;5";
input = input + ";";
int columnNumber = 5;
List<string> result = new List<string>();
for (int columnIndex = 0; columnIndex < columnNumber; columnIndex++)
{
StringBuilder row = new StringBuilder();
for (int i = columnIndex * 2; i < input.Length; i+= columnNumber * 2)
{
row.Append(input.Substring(i, 2));
}
row.Remove(row.Length - 1, 1);
result.Add(row.ToString());
}
Assert.AreEqual("1;2;3;4;5", result[0]);
Assert.AreEqual("2;2;3;4;5", result[1]);
您可以在; 或, 等结果字符串集合的形式上写信。另外我添加了一些断言来检查结果(你可以删除它)
【讨论】:
您可以使用以下代码将字符串分组到数组列表中,每个数组包含来自源字符串的 5 个元素:
private void Test()
{
var str = "1;2;3;4;5;2;2;2;2;2;3;3;3;3;3;4;4;4;4;4;5;5;5;5;5";
var items = str.Split(';').Select(x => int.Parse(x)).ToList();
var result = ChunkBy(items, 5);
}
private List<T[]> ChunkBy<T>(List<T> list, int count)
{
var result = new List<T[]>();
var groupsCount = list.Count / count;
while (result.Count < groupsCount)
{
result.Add(list.Skip(count * result.Count).Take(count).ToArray());
}
return result;
}
【讨论】:
使用二维数组:
var subject = "1;2;3;4;5;2;2;2;2;2;3;3;3;3;3;4;4;4;4;4;5;5;5;5;5";
var splittedSubject = subject.Split(new[]{';'});
int columns = 3;
int rows = splittedSubject.Length / columns + 1;
var twoDimArray = new int[columns,rows];
var index = 0;
foreach(var c in splittedSubject)
{
twoDimArray[index % columns, index / columns] = int.Parse(splittedSubject[index]);
index++;
}
或者像列表一样:
int columns = 3;
List<int>[] list = new List<int>[] { new List<int>(), new List<int>(),new List<int>()};
var subject = "1;2;3;4;5;2;2;2;2;2;3;3;3;3;3;4;4;4;4;4;5;5;5;5;5";
var splitted = subject.Split(new[]{';'});
var index = 0;
foreach(var c in splitted)
{
list[index % columns].Add(int.Parse(splitted[index]));
index++;
}
【讨论】:
我假设您的意思是将“前五个字符”放入第一列,接下来的五个放入第二列,依此类推。
首先将输入字符串转换为包含数字的数组(作为字符串)。
然后将其转换为整数的二维数组:
public static int[,] ToMatrix(string input)
{
const int Rows = 5;
string[] numbers = input.Split(';');
int columns = (numbers.Length + Rows - 1) / Rows;
int[,] matrix = new int[Rows, columns];
int i = 0;
for (int col = 0; col < columns; col++) {
for (int row = 0; row < Rows; row++, i++) {
// In case numbers.Length is not divisible by 5.
if (i >= numbers.Length) return matrix;
matrix[row, col] = Int32.Parse(numbers[i]);
}
}
return matrix;
}
您也可以选择不处理输入长度不能被 5 整除的情况并删除多余的数字。那么列号就是:
int columns = numbers.Length / Rows;
if (i >= numbers.Length) return matrix; 可以被删除。
【讨论】: