如何从字符串 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&lt;char&gt;)或几乎遗留的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 字符矩阵的主要内容,如果未能解决你的问题,请参考以下文章

unity3d Texture2D c#初始化

如何在Swift中将2D数组变量分配给大的浮动矩阵?

错误 - 连接字符串属性尚未初始化(C# 数据库)?

在C#中使用默认值初始化字符串数组的3种方式

在 VS2013 中使用指定的初始化程序来初始化结构中的 2D 字符数组初始化程序会发出错误 C2078

在 WinForms c# 面板上绘制矩阵[x,y]