【问题标题】:how to init a 2d matrix of chars from strings C#如何从字符串 C# 初始化 2d 字符矩阵
【发布时间】: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++ 中很容易完成,因为我们可以以不同的方式转换和管理内存?

【问题讨论】:

    标签: c# c++ arrays


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2022-11-17
      • 2013-04-29
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多