Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14

Corlib .NStar (Pre-Pre-Alpha) 0.05. Теперь отдельно от нелюбимого многими языка!

15.11.2022, 02:13. Показов 12011. Ответов 194
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помню, кто-то писал о функциях C# .NStar примерно следующее (неточная цитата): "все это или уже есть в языке, просто вы не в курсе, или лечится подключением библиотеки или банальным написанием функции". Тогда я отреагировал на это высказывание отрицательно, но теперь подумал и решил, что новичкам, может быть, и пригодится язык с богатым фреймворком и низким порогом вхождения, но новички - очень ограниченный круг охвата, а большинству людей трудно переучиваться, поэтому неплохо было бы подключить библиотеку и не изучать новый язык. Так появился проект Corlib .NStar - новая библиотека, объединяющая BigCollections и стандартную библиотеку C# .NStar. Ее можно подключить практически к любому не эзотерическому/игрушечному языку и не слишком упрощенному конструктору, вот только желательно было бы протестировать на предмет доступности функций в неуправляемых языках - есть подозрение, что они "прячутся", хотя я навесил на них DllExport. Изменений много, подробнее читайте на нашей новой странице GitHub. Некоторые изменения из стандартной библиотеки C# .NStar в разработке, например, замена. А некоторые вряд ли когда-то будут доступны вне C# .NStar по объективным причинам, как, например, escape-последовательности \! и \q. Так что библиотека явно менее функциональна, чем полноценный язык. Но не намного. Тестируйте, дорогу осиливает идущий!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2022, 02:13
Ответы с готовыми решениями:

Как вытащить все данные между тегами <pre></pre>
Добрый вечер! Ребята, как получить текст с страницы? Сама страница: &lt;html&gt;&lt;head&gt;&lt;link rel=&quot;stylesheet&quot;...

Вставка тега <pre></pre> в файлы директории
Здравствуйте, форумчане! Не подскажете как можно средствами php вставить тег &lt;pre&gt;&lt;/pre&gt; во все текстовые файлы в директории...

Pre-alpha Season Unreal Tournament
Качаю последнюю версию, которая уже в разработке, потому что 3 для меня не актуальна - накувыркался с ботами с тройки достаточно, в онлайне...

194
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 17:00
Студворк — интернет-сервис помощи студентам
Etyuhibosecyu, ладно, чуть позже.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 17:01  [ТС]
Usaga, вы еще вчера собирались.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 17:04  [ТС]
Попробовал другой метод, кроме AsSpan(). Кто будет проверять - не забудьте скачать новую версию кода, там была небольшая ошибка! И заметьте, это массив, а не моя коллекция!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
Random random = new(1234567890);
var list = OptimizedLinq.Fill(x => random.Next(0, 65536), 50000).ToArray();
 
Stopwatch sw = Stopwatch.StartNew();
var t = E.Select(list, (elem, index) => (elem, index));
//var a = E.ToList(E.Select(E.Where(t, x => x.elem == E.Max(t, x => x.elem)), x => x.index));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = list.IndexesOfMax();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
//Console.WriteLine(b.Equals(a));
К сожалению, с чистым итератором пока глючит.
Миниатюры
Corlib .NStar (Pre-Pre-Alpha) 0.05. Теперь отдельно от нелюбимого многими языка!  
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 17:22
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
С нормальным массивом я уже исправил:
Что-то не видно:
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 17:25  [ТС]
Usaga, опять вы про AsSpan()! Я же в том же сообщении написал другой метод, который, к слову, уже работает и с чистым итератором:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
Random random = new(1234567890);
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 50000), x => x);
 
Stopwatch sw = Stopwatch.StartNew();
var t = E.Select(list, (elem, index) => (elem, index));
var a = E.ToList(E.Select(E.Where(t, x => x.elem == E.Max(t, x => x.elem)), x => x.index));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = list.IndexesOfMax();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(b.Equals(a));
Миниатюры
Corlib .NStar (Pre-Pre-Alpha) 0.05. Теперь отдельно от нелюбимого многими языка!  
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 17:28  [ТС]
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
в том же сообщении
Забыл, где я писал процитированное вами. Значит, скорость примерно одинакова, иногда один быстрее, иногда другой.
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 18:38
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
, опять вы про AsSpan()! Я же в том же сообщении написал другой метод, который, к слову, уже работает и с чистым итератором:
Вы опять дичь написали и радуетесь:



Погрешность в районе 16мс, что минимальный шаг таймера под виндой...
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 18:43  [ТС]
Сообщение удалено.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 18:45  [ТС]
Usaga, вот тест с чистым итератором и с сохранением max:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Random random = new(1234567890);
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000), x => x);
 
Stopwatch sw = Stopwatch.StartNew();
var t = E.Select(list, (elem, index) => (elem, index));
var max = E.Max(t, x => x.elem);
var a = E.ToList(E.Select(E.Where(t, x => x.elem == max), x => x.index));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = list.IndexesOfMax();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(b.Equals(a));
Миниатюры
Corlib .NStar (Pre-Pre-Alpha) 0.05. Теперь отдельно от нелюбимого многими языка!  
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 18:52
Etyuhibosecyu, вы взяли мой вариант на прошлом скрине и сделали его менее оптимальным. Зачем?

Т.е. вы видите оптимизации в замедлении исходного кода, а не в ускорении своего?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 18:59  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
вы взяли мой вариант на прошлом скрине и сделали его менее оптимальным. Зачем?
Вот оптимальный, или укажите, где конкретно неоптимальность:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Random random = new(1234567890);
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000), x => x);
 
Stopwatch sw = Stopwatch.StartNew();
var max = E.Max(list, x => x);
var a = E.ToList(E.Select(E.Where(E.Select(list, (elem, index) => (elem, index)), x => x.elem == max), x => x.index));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = list.IndexesOfMax();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(b.Equals(a));
 
//Stopwatch sw = Stopwatch.StartNew();
//var a = E.ToList(E.OrderBy(list, x => x));
//sw.Stop();
//Console.WriteLine(sw.ElapsedMilliseconds);
//sw.Restart();
//var b = list.NSort();
//sw.Stop();
//Console.WriteLine(sw.ElapsedMilliseconds);
//Console.WriteLine(b.Equals(a));

Сделал также сортировку (нужно обновиться), это не LINQ, только для списка, но если раскомментировать второй тест выше и заменить исходный list на список длиной 107, он выдает вот что:

P. S. "Красивые" числа на этих двух скриншотах - абсолютная случайность.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 19:07  [ТС]
Usaga, и вы снова забыли про ParallelHashSet<T>. Если вам плевать на то, что Microsoft его не реализовала, а Red-Star-Soft реализовала, так и напишите, но не тяните резину!
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 19:18
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вот оптимальный, или укажите, где конкретно неоптимальность:
Он не сильно оптимальный:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Random random = new(1234567890);
 
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000), x => x);
 
Stopwatch sw = Stopwatch.StartNew();
 
var a = E.Aggregate(list, new Acc(), (acc, value) => acc.Update(value));
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
sw.Restart();
 
var b = list.IndexesOfMax();
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
Console.WriteLine(b.Equals(a));
 
sealed class Acc
{
    public List<int> Indexes { get; } = new List<int>();
 
    private int Index;
    private int Max;
 
    public Acc Update(int value)
    {
        Index++;
 
        if (Max < value)
        {
            Max = value;
            Indexes.Clear();
            Indexes.Add(Index);
        } 
        else if (Max == value)
        {
            Indexes.Add(Index);
        }
 
        return this;
    }
}




Или даже так:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Random random = new(1234567890);
 
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000), x => x);
 
Stopwatch sw = Stopwatch.StartNew();
 
var a = list.IndexesOfMax();
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
sw.Restart();
 
var b = list.IndexesOfMax();
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
Console.WriteLine(b.Equals(a));
 
static class TurboExt
{
    public static List<int> IndexesOfMax(this System.Collections.Generic.IEnumerable<int> source)
    {
        var indexes = new List<int>();
        int index = default;
        int max = Int32.MinValue;
 
        foreach (var item in source)
        {
            index++;
 
            if (max < item)
            {
                max = item;
                indexes.Clear();
                indexes.Add(index);
            }
            else if (max == item)
            {
                indexes.Add(index);
            }
        }
 
        return indexes;
    }
}


0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 19:19
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
и вы снова забыли про ParallelHashSet<T>. Если вам плевать на то, что Microsoft его не реализовала, а Red-Star-Soft реализовала, так и напишите, но не тяните резину!
Вы меня со скорой помощью не перепутали? Не наглейте.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 19:20  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Он не сильно оптимальный:
Ну да, извращенным способом можно сделать оптимально. А у меня не только оптимально, но и одной красивой строкой.
Цитата Сообщение от Usaga Посмотреть сообщение
Вы меня со скорой помощью не перепутали? Не наглейте.
Ясно, восприму это как отказ.
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 19:25
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну да, извращенным способом можно сделать оптимально. А у меня не только оптимально, но и одной красивой строкой.
Стоп. У вас не одной строкой. Вам весь ваш кода поднять, который стоит за IndexesOfMax? Я этот код тоже могу вынести в другой файл\сборку. Тоже будет одна строка. Только от вашей библиотеки зависимости не будет.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ясно, восприму это как отказ.
В смысле?
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 19:30
Etyuhibosecyu, посмотрел я ваш вариант многопоточного хеш-сета...

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Random random = new(1234567890);
 
Console.WriteLine("Hello World!");
 
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000), x => x);
 
Stopwatch sw = Stopwatch.StartNew();
 
var a = new G.HashSet<int>(list);
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
sw.Restart();
 
var b = new ParallelHashSet<int>(list);
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
Console.WriteLine(b.SetEquals(a));




Тут вопрос встаёт такой: с какого перепугу вы решили, что исходный IEnumerable будет thread safe?)
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 19:33  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Тут вопрос встаёт такой: с какого перепугу вы решили, что исходный IEnumerable будет thread safe?)
А это и не требуется. Он будет просто отдавать одно значение за другим. А ParallelHashSet<T> будет их многопоточно принимать.
0
Эксперт .NET
 Аватар для Usaga
14728 / 9504 / 1362
Регистрация: 21.01.2016
Сообщений: 35,842
17.11.2022, 19:36
Etyuhibosecyu, что, блин?) Вы там Paraller.ForEach под капотом используете.

Добавлено через 51 секунду
Вы ЧИТАЕТЕ из итератора в несколько потоков. Это уже многопоточность.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 19:38  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вы ЧИТАЕТЕ из итератора в несколько потоков. Это уже многопоточность.
А что, читать в несколько потоков запрещено? Не знаю, чтобы хоть в массиве, хоть в чистом итераторе было запрещено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2022, 19:38

Вывести ответ сервера в <pre></pre>
Добрый день! Подскажите, пожалуйста, как мне в примере ниже сделать так, чтобы значение data выводилось не с помощью alert, а выводилось в...

Hash Function Efficiency v0.1 pre-Alpha (May 11th, 2017)
Вот код, для наглядности (cyberforum.ru - не сохраняет оригинал кода! может не компилироваться) комментарии не удалял... #include...

перенос и <pre>
столкнулся с такой проблемой - если текст выводить с помощью &lt;pre&gt; то если например текст вводился через &lt;textarea&gt; без энтэров то...

Тэг PRE
Всем привет, есть довольно таки специфический вопрос, хоть я и знаю, что к тэгу pre мало какие стили можно применить, но все - таки может...

Отличие <pre> от <p>
Скажите, в чём отличие между этими тегами?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Опции темы

Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru