Re[12]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vfedosov  
Дата: 05.09.21 08:55
Оценка:
Здравствуйте, 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 — хотя не уверен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.