如何从字符串 C# 初始化 2d 字符矩阵
Posted
技术标签:
【中文标题】如何从字符串 C# 初始化 2d 字符矩阵【英文标题】:how to init a 2d matrix of chars from strings C# 【发布时间】:2018-07-31 08:27:39 【问题描述】:我想在 C# 中创建一个二维矩阵。 我在 C++ 中有以下示例代码
https://www.geeksforgeeks.org/search-a-word-in-a-2d-grid-of-characters/
我想像在 C++ 中那样初始化矩阵
int main()
char grid[R][C] = "GEEKSFORGEEKS",
"GEEKSQUIZGEEK",
"IDEQAPRACTICE"
;
patternSearch(grid, "GEEKS");
....
这是我的 C# 代码
List<string> rows = new List<string> "GEEKSFORGEEKS", "GEEKSQUIZGEEK", "IDEQAPRACTICE";
char[,] grid = new char[rows.Count, rows[0].Length];
for (int r = 0; r < rows.Count; r++)
char[] charArray = rows[r].ToCharArray();
for (int c = 0; c < charArray.Length; c++)
grid[r, c] = charArray[c];
有没有办法像在 c++ 中一样初始化矩阵?将字符串转换为 char 数组,或者这在 c++ 中很容易完成,因为我们可以以不同的方式转换和管理内存?
【问题讨论】:
【参考方案1】:string
不是char[]
,两者之间没有隐式或显式转换。从字符串中获取字符数组的方法是调用扩展方法Enumerable.ToArray()
(string
实现IEnumerable<char>
)或几乎遗留的String.ToCharArray()
考虑到这一点,您正在寻找的语法是:
char[][] grid = "GEEKSFORGEEKS".ToArray(),
"GEEKSQUIZGEEK".ToArray(),
"IDEQAPRACTICE".ToArray() ;
现在,如果您尝试获取char[,]
,您将遇到一堵砖墙; c# 语法允许您执行以下操作:
char[][] grid = `G`, `E`, `E`, ... ,
`G`, `E`, `E`, ...
`I`, `D`, `E`, ... ;
但是,再一次,因为字符串文字不是字符的 char,编译器会简单地阻止:
char[][] grid = "GEEKSFORGEEKS" ,
"GEEKSQUIZGEEK"
"IDEQAPRACTICE" ;
它只会给您一个编译时错误,通知您string
不是char
。该初始化的实际类型是string[,]
,大小为[3, 1]
。
【讨论】:
我知道 ToArray 和 ToCharArray 是一样的,我的问题是用判断数组而不是二维数组,想知道我们是否可以用 char[,] 代替 char[][]。很酷,谢谢! +1 正是我要发布的答案,但可能值得指出的是,这个答案使用了array of arrays rather than a 2d array,这可能会造成混淆。 编辑:嘿,错过了 OP 的评论几秒钟 @Gilad 不,您不能使用数组初始化语法从字符串数组中获取char[,]
;原因是一样的,string
不是字符数组。
@InBetween 你能解释一下为什么吗?我猜是因为它是一个数组数组?但我不确定。【参考方案2】:
是的,如上所述,您可以使用 ToArray() 函数来实现理想的结果
"STRING".ToArray()
【讨论】:
以上是关于如何从字符串 C# 初始化 2d 字符矩阵的主要内容,如果未能解决你的问题,请参考以下文章