たとえば、文字列配列があり、var array = new[] { "the", "cat", "in", "the", "hat" }
各単語の間にスペースを入れてそれらを結合したい場合は、単に呼び出すことができますString.Join(" ", array)
。
しかし、整数配列の配列があるとします (文字配列の配列を持つことができるのと同じように)。それらを 1 つの大きな配列に結合 (フラット化) したいのですが、同時に各配列の間に値を挿入します。
var arrays = new[] { new[] { 1, 2, 3 }, new[] { 4, 5, 6 }, new { 7, 8, 9 }};
var result = SomeJoin(0, arrays); // result = { 1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9 }
私は何かを書きましたが、それは非常に醜く、より良い、よりクリーンな方法があると確信しています。多分もっと効率的ですか?
var result = new int[arrays.Sum(a => a.Length) + arrays.Length - 1];
int offset = 0;
foreach (var array in arrays)
{
Buffer.BlockCopy(array, 0, result, offset, b.Length);
offset += array.Length;
if (offset < result.Length)
{
result[offset++] = 0;
}
}
おそらくこれが最も効率的ですか?わかりません...もっと良い方法があるかどうかを確認するだけです。おそらくLINQがこれを解決するだろうと思っていましたが、残念ながら私が必要としているものは何もありません。