如何使用C#将2维数组字符串[,]转换为字符串

时间:2015-05-06 14:20:24

标签: c# arrays string dimensional

我有二维阵列

wp-content/themes/

提醒:

var temp = new string[,] { { "1", "2", "3" }, { "4", "5", "6" }, { "7", "8", "9" } };

我想转换为...

string[,] != string[][]

在这种情况下如何快速转换?

3 个答案:

答案 0 :(得分:0)

对于单个代码行,您可以使用:

<span class="notranslate" translate="no">Don’t Translate Me</span>
如果您不将数组定义为多维数组,单行代码看起来会更好:

var temp = new string[,] { { "1", "2", "3" }, { "4", "5", "6" }, { "7", "8", "9" } };
var result = string.Join("\r\n\r\n", 
    temp.OfType<string>()
    .Select((str, idx) => new {index = idx, value = str})
    .GroupBy(a => a.index/(temp.GetUpperBound(0) + 1))
    .Select(gr => gr.Select(n => n.value).ToArray())
    .Select(a => string.Join("", a.SelectMany(x => x)))
    .ToArray());

只是连接你可以使用的多维数组:

string[][] array2d = { new[] { "1", "2", "3" }, new[] { "4", "5", "6" }, new[] { "7", "8", "9" } };
string[][] jagged2d = { new[] { "1", "2", "3" }, new[] { "4", "5" }, new[] { "6" } };

string array2dConcatenate = string.Join("\r\n\r\n", array2d.Select(a => string.Join("", a.SelectMany(x => x))));
string jagged2dConcatenate = string.Join("\r\n\r\n", jagged2d.Select(a => string.Join("", a.SelectMany(x => x))));

充分利用linq,请参阅:When to use Cast() and Oftype() in Linq

如果您想使用3d数组或保护null,您可以执行以下操作:

string[,] multidimensional2d = { { "1", "2", "3" }, { "4", "5", "6" } };
string[,,] multidimensional3d = { { { "1", "2" }, { "3", "4" } }, { { "5", "6" }, { null, null } } };
string multidimensional2dConcatenate = string.Join(", ", multidimensional2d.OfType<string>());
string multidimensional3dConcatenate = string.Join(", ", multidimensional3d.OfType<string>());

答案 1 :(得分:0)

private static string ObjectToString(IList<object> messages)
    {
        StringBuilder builder = new StringBuilder();
        foreach (var item in messages)
        {

            if (builder.Length > 0)
                builder.Append(" ");
            if (item is IList<object>)
                builder.Append(ObjectToString((IList<object>)item));
            else
                builder.Append(item);

        }

        return builder.ToString();
    }

答案 2 :(得分:-1)

这是一种有两个嵌套循环的方法:

var temp = new string[,]{{"1","2","3"},{"4","5","6"}};
var output = new string[temp.GetUpperBound(0)+1];
for (int i = 0; i<=temp.GetUpperBound(0); i++)
{
    var sb = new StringBuilder(temp.GetUpperBound(1)+1);
    for (int j = 0; j<=temp.GetUpperBound(1); j++)
        sb.Append(temp[i,j]);
    output[i] = sb.ToString();
}

如果你认为你可以将2-d数组视为1-d并绕过2个循环,那么这里有一些技巧:How to copy a row of values from a 2D array into a 1D array?但是为了能够使用这些技巧你需要char数组,不是你问过的字符串数组。