如何在 C# 中用字符填充锯齿状数组
How can I populate jagged array with chars in c#
我正在努力用字符填充锯齿状数组
我的目标是读取字符串。将它们切成字符,然后用这些字符填充锯齿状数组
"Lorem",
5,
new char[][]
{
new char[] { 'L', 'o', 'r', 'e', 'm' },
},
或
"Loremipsumdolorsitamet",
5,
new char[][]
{
new char[] { 'L', 'o', 'r', 'e', 'm' },
new char[] { 'i', 'p', 's', 'u', 'm' },
new char[] { 'd', 'o', 'l', 'o', 'r' },
new char[] { 's', 'i', 't', 'a', 'm' },
new char[] { 'e', 't' },
},
喜欢这个例子。上面的字符串下的整数代表 arraySize(即列数),streamReader(见下面的代码)是字符串本身。我正在使用 System.IO 和 System.Text
var read = streamReader.ReadToEnd().ToCharArray();
if (read.Length == 0)
{
return Array.Empty<char[]>();
}
char[][] jagArray = new char[read.Length / 5][];
for (int p = 0; p < read.Length; p++)
{
for (int i = 0; i < read.Length / arraySize; i++)
{
jagArray[i] = new char[arraySize];
for (int j = 0; j < arraySize; j++)
{
jagArray[i][j] = read[p];
}
}
}
return jagArray;
我试过这段代码,但显然行不通。
string str = "Loremipsumdolorsitamet";
int slice = 5;
List<List<char>> list = new List<List<char>>();
List<char> list2 = new List<char>();
int limit = str.Length/5 +1;
for (int i = 0; i < limit; i++)
{
if (str.Length <= 5)
{
slice = str.Length;
}
for (int j = 0; j < slice; j++)
{
list2.Add(str[j]);
}
str = str.Remove(0, slice);
list.Add(list2);
list2 = new List<char>();
}
希望我理解正确,这是我做这件事的非常糟糕的方式,希望一些更有经验的用户可以提供一些信息来改进它。
编辑。输出:
foreach(var a in list)
{
foreach (var b in a)
{
Console.Write(b + " ");
}
Console.WriteLine();
}
L o r e m
i p s u m
d o l o r
s i t a m
e t
使用此方法将单个 char[]
数组拆分为数组数组,每个数组的长度不超过 cols
个字符长度:
public static char[][] ToJaggedArray(char[] chars, int cols)
{
int rows = (chars.Length + cols - 1) / cols;
char[][] jagArray = new char[rows][];
for (int i = 0; i < rows; i++)
{
jagArray[i] = new char[Math.Min(cols, chars.Length - cols * i)];
}
for (int i = 0; i < chars.Length; i++)
{
int row = i / cols;
int col = i % cols;
jagArray[row][col] = chars[i];
}
return jagArray;
}
我正在努力用字符填充锯齿状数组 我的目标是读取字符串。将它们切成字符,然后用这些字符填充锯齿状数组
"Lorem",
5,
new char[][]
{
new char[] { 'L', 'o', 'r', 'e', 'm' },
},
或
"Loremipsumdolorsitamet",
5,
new char[][]
{
new char[] { 'L', 'o', 'r', 'e', 'm' },
new char[] { 'i', 'p', 's', 'u', 'm' },
new char[] { 'd', 'o', 'l', 'o', 'r' },
new char[] { 's', 'i', 't', 'a', 'm' },
new char[] { 'e', 't' },
},
喜欢这个例子。上面的字符串下的整数代表 arraySize(即列数),streamReader(见下面的代码)是字符串本身。我正在使用 System.IO 和 System.Text
var read = streamReader.ReadToEnd().ToCharArray();
if (read.Length == 0)
{
return Array.Empty<char[]>();
}
char[][] jagArray = new char[read.Length / 5][];
for (int p = 0; p < read.Length; p++)
{
for (int i = 0; i < read.Length / arraySize; i++)
{
jagArray[i] = new char[arraySize];
for (int j = 0; j < arraySize; j++)
{
jagArray[i][j] = read[p];
}
}
}
return jagArray;
我试过这段代码,但显然行不通。
string str = "Loremipsumdolorsitamet";
int slice = 5;
List<List<char>> list = new List<List<char>>();
List<char> list2 = new List<char>();
int limit = str.Length/5 +1;
for (int i = 0; i < limit; i++)
{
if (str.Length <= 5)
{
slice = str.Length;
}
for (int j = 0; j < slice; j++)
{
list2.Add(str[j]);
}
str = str.Remove(0, slice);
list.Add(list2);
list2 = new List<char>();
}
希望我理解正确,这是我做这件事的非常糟糕的方式,希望一些更有经验的用户可以提供一些信息来改进它。
编辑。输出:
foreach(var a in list)
{
foreach (var b in a)
{
Console.Write(b + " ");
}
Console.WriteLine();
}
L o r e m
i p s u m
d o l o r
s i t a m
e t
使用此方法将单个 char[]
数组拆分为数组数组,每个数组的长度不超过 cols
个字符长度:
public static char[][] ToJaggedArray(char[] chars, int cols)
{
int rows = (chars.Length + cols - 1) / cols;
char[][] jagArray = new char[rows][];
for (int i = 0; i < rows; i++)
{
jagArray[i] = new char[Math.Min(cols, chars.Length - cols * i)];
}
for (int i = 0; i < chars.Length; i++)
{
int row = i / cols;
int col = i % cols;
jagArray[row][col] = chars[i];
}
return jagArray;
}