給定兩個數組:切片陣列基於選擇口罩
double[] a = new double[]{1.0, 2.0, 3.0};
bool[] b = new bool[]{true, false, true};
有一個簡單的方法基於b
在a
選擇?在R和其他腳本語言中,你會說:
a[b]
得到{1.0, 3.0}
。我無法弄清楚在C#中是否存在乾淨的(沒有顯式循環)方式。也許我應該組織不同的數據?
給定兩個數組:切片陣列基於選擇口罩
double[] a = new double[]{1.0, 2.0, 3.0};
bool[] b = new bool[]{true, false, true};
有一個簡單的方法基於b
在a
選擇?在R和其他腳本語言中,你會說:
a[b]
得到{1.0, 3.0}
。我無法弄清楚在C#中是否存在乾淨的(沒有顯式循環)方式。也許我應該組織不同的數據?
你可以做到這一點使用LINQ:
double[] a = new double[]{1.0, 2.0, 3.0};
bool[] b = new bool[]{true, false, true};
var result = a.Where((item, index)=>b[index]);
使用LINQ Zip
方法,如:
a.Zip(b, (i, j) => new {i, j}).Where(x => x.j).Select(x => x.i)
+1郵編:D:D –
@DaveBish,謝謝。 –
不錯的方法,不知道Zip方法。 –
還有這個比較傳統的LINQ方法:
b.Select((f, i) => f ? i : - 1).Where(i => i != -1).Select(i => a[i]);
這實現了什麼? – Jon
@Jon,謝謝你指出錯誤。我已經修復了代碼。 – RePierre
錯誤的用法。條件在哪裏?它只會給出結果的副本。 –