Re[38]: Python vs C#
От: WolfHound  
Дата: 13.05.05 11:15
Оценка: 4 (2) :))
Здравствуйте, FR, Вы писали:

FR>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

Функции readlines в библиотеке .НЕТ нет по этому мы ее напишем.
        static IEnumerable<string> Lines(Stream stream)
        {
            using (StreamReader reader = new StreamReader(stream))
                for (string line; (line = reader.ReadLine()) != null; )
                    yield return line;
        }

FR>arr = open("test.txt").readlines()
FR>arr.sort()
            List<string> lines;
            using (Stream file = File.OpenRead("text.txt"))
                lines = new List<string>(Lines(file));
            lines.Sort();

FR>out = open("out.txt", "w")
FR>for line in arr:
FR>    print >> out, line,
            using (TextWriter file = File.CreateText("out.txt"))
                foreach (string line in lines)
                    file.WriteLine(file);

Отсутствие типизации и необходимости объявлять переменные в питоне я считаю большим недостатком.

FR>Суммирование чисел из файла(в каждой строке файла одно число):

Опять библиотека...
Да будут операторы
        delegate T Operator<T>(T l, T r);
        interface IMathOperators<T>
        {
            Operator<T> Add { get; }
            Operator<T> Sub { get; }
            Operator<T> Mul { get; }
            Operator<T> Div { get; }
        }
        class MathOperatorsInt : IMathOperators<int>
        {
            public Operator<int> Add { get { return delegate(int l, int r) { return l + r; }; } }
            public Operator<int> Sub { get { return delegate(int l, int r) { return l - r; }; } }
            public Operator<int> Mul { get { return delegate(int l, int r) { return l * r; }; } }
            public Operator<int> Div { get { return delegate(int l, int r) { return l / r; }; } }
        }
        static Dictionary<Type, object> MathOperatorsMap = new Dictionary<Type, object>();
        static IMathOperators<T> MathOperators<T>()
        {
            return (IMathOperators<T>)MathOperatorsMap[typeof(T)];
        }
        static Program()
        {
            MathOperatorsMap.Add(typeof(int), new MathOperatorsInt());
        }

Теперь сделаем недостающие функции
        delegate T Parse<T>(string s);
        static IEnumerable<T> Map<T>(Stream stream)
        {
            Parse<T> parse = (Parse<T>)Delegate.CreateDelegate(typeof(Parse<T>),
                typeof(T), "Parse");
            foreach (string line in Lines(stream))
                yield return parse(line);
        }
        static T Sum<T>(IEnumerable<T> numbers)
        {
            Operator<T> add = MathOperators<T>().Add;
            T val = default(T);
            foreach (T number in numbers)
                val = add(val, number);
            return val;
        }

FR>
FR>import sys, itertools
FR>print sum(itertools.imap(int, open("in.txt")))
FR>

    using (Stream file = File.OpenRead("text.txt"))
        Console.WriteLine(Sum(Map<int>(file)));


FR>Другой пример я уже приводил Владу, простейший калькулятор(он из темы где вы с Владом спорили и ты делал этот же калькулятор на плюсах ссылки к сожалению не помню)

Это тоже решается библиотекой.


А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.