代码之家  ›  专栏  ›  技术社区  ›  CocoaMix86

将多维数组转换为字符串

  •  0
  • CocoaMix86  · 技术社区  · 7 年前

    我有一个三维字符数组初始化如下:

    char[,,] cube = new char[10, 10, 10];

    它被完全填满了,我想把它的内容转换成一个字符串。我目前的方法是:

    for (int z = 0; z < 10; z++) {
        for (int y = 0; y < 10; y++) {
            for (int x = 0; x < 10; x++) {
                build += cube[z, y, x];
            }
        }
    }
    

    正在尝试做 build = new string(cube) 给出一个错误:
    cannot convert from 'char[*,*,*]' to 'char*'

    for 循环速度非常快,在我的设置中不到一毫秒就完成了(从1500到4000个滴答)。想知道是否有一个单行方法可以完成与这些嵌套方法相同的任务 你在干什么?

    编辑:
    这个代码在整个程序中只使用一次,所以我不需要可重用的东西。

    4 回复  |  直到 7 年前
        1
  •  3
  •   Corak    7 年前

    林克是你的朋友。

    多维数组实现 IEnumerable IEnumerable<T> . 所以首先我们需要一个 能够充分利用LINQ。幸运的是,在本例中,我们知道多维数组中的每个项都是 char

    接下来,创建 string char[] . 得到一个 字符[] IEnumerable<char> ToArray() 走开。

    using System.Linq;
    
    var build = new string(cube.OfType<char>().ToArray());
    
        2
  •  2
  •   V0ldek    7 年前

    这比你想象的要容易:

    public static String FlattenToString(this char[,,] array)
    {
        var builder = new StringBuilder();
    
        foreach(var @char in array)
        {
            builder.Append(@char);
        }
    
        return builder.ToString();
    }
    
    var cube = new char[2,2,2];
    
    cube[0,0,0] = 'a';
    cube[0,0,1] = 'b';
    cube[0,1,0] = 'c';
    cube[0,1,1] = 'd';
    cube[1,0,0] = 'e';
    cube[1,0,1] = 'f';
    cube[1,1,0] = 'g';
    cube[1,1,1] = 'h';
    
    Console.WriteLine(cube.FlattenToString());
    

    abcdefgh .

        3
  •  2
  •   Slai    7 年前
    string build = string.Concat(cube.Cast<char>());
    

    char[] :

    //var cube = new[, ,] { { { 'a', 'b' }, { 'c', 'd' } }, { { 'e', 'f' }, { 'g', 'h' } } };
    char[] temp = new char[cube.Length];
    Buffer.BlockCopy(cube, 0, temp, 0, temp.Length * sizeof(char));
    string build = new string(temp);
    
        4
  •  1
  •   Sumit raj    7 年前
    char[,,] cube = new char[10, 10, 10];
                    for (int z = 0; z < 10; z++)
                    {
                        for (int y = 0; y < 10; y++)
                        {
                            for (int x = 0; x < 10; x++)
                            {
                                cube[z, y, x] = (char)(65+x);
                            }
                        }
                    }
    /* Just Filling data in array*/    
                    var s1 = cube.OfType<char>().ToList();
                    string s = string.Join("",s1);