Здравствуйте, vfedosov, Вы писали:
V>Чего я и ожидал собственно. Или в новых версия .Net есть "implementation of the query pattern for source type 'double[*,*]'" ?
Ты всегда можешь написать расширение
public static class TwoDimensionalArrayEnumerable
{
public static IEnumerable<T> ToEnumerable<T>(this T[,] array)
{
for (int i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i++)
{
for (int j = array.GetLowerBound(1); j <= array.GetUpperBound(1); j++)
{
yield return array[i, j];
}
}
}
public static T[,] ToArray<T>(this IEnumerable<T> en, T[,] array)
{
var result = array;//(T[,]) Array.CreateInstance(typeof(T), fub, sub);
var elemCount = array.GetUpperBound(1) - array.GetLowerBound(1) + 1;
int ind = 0;
foreach(T elem in en)
{
result[ind / elemCount, ind % elemCount] = elem;
ind++;
}
return result;
}
}
static void TestLinq()
{
var array2d = new double[1000, 1000];
array2d = (from a in array2d.ToEnumerable() select Math.Min(a * 1.5, 1.0)).ToArray(array2d);
}
Есть прекраснейшая конструкция yield на основании которой ты можешь строить любые итераторы.
Для использования как в питоне, нужно просто сконструировать класс который будет держать данные о массиве.
Лениво