不知道這是否是「最好」的方式(無論這意味着什麼),但這至少起作用。如果您需要更多的LINQ語法,可以輕鬆擴展。
public static class Matrix
{
public static TResult[,] Select<T, TResult>(this T[,] source, Func<T, TResult> f)
{
var rows = source.GetLength(0);
var columns = source.GetLength(1);
var result = new TResult[rows, columns];
for (var row = 0; row < rows; row++)
{
for (var column = 0; column < columns; column++)
{
result[row, column] = f(source[row, column]);
}
}
return result;
}
}
使用以下(相當缺乏光澤)xunit實際測試,隨意指出錯誤。
[Fact]
public void MatrixSelect_GivenFunction_MapsMatrix()
{
var matrix = new[,]
{
{true, true},
{false, true}
};
var transformed =
from cell in matrix
select cell ? 1 : 0;
var expected = new[,]
{
{1, 1},
{0, 1}
};
Assert.Equal(expected, transformed);
}
來源
2016-07-19 16:18:10
kai
寫一堆自定義的LINQ擴展看起來是最簡單和最乾淨的路徑。這種繁瑣的編寫和維護這種樣板代碼,但哦。 – kai