-2

私は2次元配列を持っています

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

思い出させる:

string[,] != string[][]

に変換したい...

123

456

789

この場合、高速変換する方法は?

4

3 に答える 3

0

単一のコード行の場合、次を使用できます。

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

配列を多次元配列として定義しないと、1 行のコードが見栄えがよくなります。

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

使用できる多次元配列を連結するだけです:

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

linq を最大限に活用するには、Linq で Cast() と Oftype() を使用する場合を参照してください。

3D 配列を使用するか、null から保護する場合は、次のようにすることができます。

string[][][] array3d = { new[] { new[] { "1", "2" } }, new[] { new[] { "3", "4" } }, new[] { new[] { "5", "6" } }, null };
string[][][] jagged3d = { new[] { new[] { "1", "2" }, new[] { "3" } }, new[] { new[] { "4" }, new[] { "5" } }, new[] { new[] { "6" }, null }, null };

string array3dConcatenate = string.Join("\r\n\r\n", array3d.Where(x => x != null).SelectMany(x => x).Where(x => x != null).Select(a => string.Join("", a.SelectMany(x => x))));
string jagged3dConcatenate = string.Join("\r\n\r\n", jagged3d.Where(x => x != null).SelectMany(x => x).Where(x => x != null).Select(a => string.Join("", a.SelectMany(x => x))));
于 2017-01-29T12:17:15.143 に答える
-1

2 つのネストされたループを使用する方法を次に示します。

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 次元配列を 1 次元として扱い、2 つのループをバイパスできると考えている場合は、ここにいくつかのトリックがあります。2次元配列から 1 次元配列に値の行をコピーする方法は? 、しかし、これらのトリックを使用できるようにするには、要求した文字列の配列ではなく、文字の配列が必要です。

于 2015-05-06T14:42:28.023 に答える