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