2017-03-07 73 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'。 而且只有少數幾行,最好是單行,這是相當清晰和簡潔的。

回答

4

您幾乎就在那裏 - 您只需要使用SelectMany而不是Select,對於您要創建輸出元素序列的每個輸入元素...然後您想將該「序列序列」平鋪爲單一序列。這正是SelectMany所做的。

所以:

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

這太酷了。謝謝。 – Steve

+0

你可以找到一個非lambda的方式來做到這一點? – Steve

+0

@ user2367083:當然,你*可以*使用查詢表達式 - 但它會更長,更難以閱讀。你爲什麼要避免使用lambda表達式?你最關心的是什麼? –

相關問題