将多维数组转换为字符串

时间:2018-09-08 15:49:43

标签: c# arrays char

我有一个这样初始化的3维char数组:

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个滴答声)就完成了。想知道是否存在单行方法可以完成这些嵌套for循环所完成的工作吗?

编辑:
该代码在整个程序中只会使用一次,因此我不需要任何可重用的东西。

4 个答案:

答案 0 :(得分:3)

LINQ是您的朋友。

一个多维数组实现了IEnumerable,但很遗憾地没有实现IEnumerable<T>。因此,首先我们需要获得一个IEnumerable<T>才能充分利用LINQ。幸运的是,在这种情况下,我们知道多维数组中的每个项目都是char类型,我们只需要告诉编译器即可。

接下来,要创建一个string,有一个方便的构造函数,它接受一个char[]。而从char[]获得IEnumerable<char>只是一个ToArray()

将它们放在一起,您将得到:

using System.Linq;

var build = new string(cube.OfType<char>().ToArray());

答案 1 :(得分:2)

这比您想象的要容易:

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

答案 2 :(得分:2)

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);

答案 3 :(得分:1)

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);