2017-03-07 4 views
0

これは私が実際に作業しているものの拡張です。 ループで実行するのは簡単ですが、シングルコード行が見つかるかどうかは不思議でした。c#array collat​​er出力が他の要素と同じ値を持つ

これは、入力された:

byte[] x = new byte[] { (byte)'a', (byte)'b', (byte)'c', (byte)'d' };

あなたが好きしかし、あなたはポイントを得ることをとにかく値を再書き込み。あなたはバイトの配列から始め、バイトの照合された配列で終わらなければなりません。ここで

は、所望の出力です:

byte[] { (byte)'a', (byte)'z', (byte)'b', (byte)'z', (byte)'c', (byte)'z', (byte)'d', (byte)'z'};

私はこれのバリエーションを試してみましたが、私は示すと、これは、それ自体では動作しません知ってる何を始めています。一日の終わりに

var y = x.Select(c => new byte[] { c, (byte)'z' });

これらは唯一であるため、値が何であるかをされたバイトを重要ではありません。 この場合、特定の値 'z'を関連付けることができます。 そして、少数の行では、1行を好む、それは合理的に明確で簡潔です。

答えて

4

あなたは非常に近いところでした。Selectの代わりにSelectManyを使用するだけです。出力要素のシーケンスを作成する各入力要素については、その「シーケンスのシーケンス」を平坦化して単一の配列。それは正確にはSelectManyのことです。

ので:あまりにもクールです

var y = x.SelectMany(c => new[] { c, (byte)'z' }).ToArray(); 
+0

。ありがとう。 – Steve

+0

これを行うラムダ以外の方法がありますか? – Steve

+0

@ user2367083:確かに、あなたは*クエリ式を使うことができますが、読むのが長くて難しくなります。なぜラムダ式を避けたいのですか?あなたの実際の懸念は何ですか? –

関連する問題