ch
Feedback
PascalABC.NET официальный канал

PascalABC.NET официальный канал

前往频道在 Telegram

Официальный канал языка и системы программирования PascalABC.NET

显示更多
1 864
订阅者
-624 小时
-57 天
-2330 天
帖子存档
Модуль DataFrameABC - удаление столбцов Для удаления столбцов используется метод Drop. Возвращается новый датафрейм. Данные н
Модуль DataFrameABC - удаление столбцов Для удаления столбцов используется метод Drop. Возвращается новый датафрейм. Данные не копируются, т.е. Drop работает как View. #DataFrameABC

Модуль DataFrameABC - выбор столбцов Для выбора столбцов используется метод Select. Возвращается новый датафрейм. Данные не к
Модуль DataFrameABC - выбор столбцов Для выбора столбцов используется метод Select. Возвращается новый датафрейм. Данные не копируются - метод Select работает как View #DataFrameABC

Вышла версия PascalABC.NET 3.11.1. Список изменений - здесь https://pascalabcnet.github.io/mydoc_release_notes_3_11_1.html Ос
Вышла версия PascalABC.NET 3.11.1. Список изменений - здесь https://pascalabcnet.github.io/mydoc_release_notes_3_11_1.html Основное - новый промышленный модуль для работы с данными - DataFrameABC. Возможности, скорость работы - сравнимы с pandas, ML.NET, Polars, Apache Spark DataFrame API.

Версия PascalABC.NET 3.11.1 Вышла версия PascalABC.NET 3.11.1. Список изменений - здесь https://pascalabcnet.github.io/mydoc_release_notes_3_11_1.html Основное - новый промышленный модуль для работы с данными - DataFrameABC. Возможности, скорость работы - сравнимы с pandas.

Модуль DataFrameABC - переименование столбцов Для переименования столбцов используется метод датафрейма Rename. Возвращается
Модуль DataFrameABC - переименование столбцов Для переименования столбцов используется метод датафрейма Rename. Возвращается новый датафрейм. Можно переименовывать несколько столбцов одномоментно #DataFrameABC

Модуль DataFrameABC - выбор столбцов Выбор столбцов в новом эффективном модуле DataFrameABC делается с помощью метода Select
Модуль DataFrameABC - выбор столбцов Выбор столбцов в новом эффективном модуле DataFrameABC делается с помощью метода Select с указанием массива выбираемых столбцов. Возвращается View в виде нового датафрейма
uses DataFrameABC;

begin
  var df := DataFrame.FromCsvText('''
  name,age,score
  Alice,20,85
  Bob,22,90
  Charlie,21,78
  ''');
  
  df.Select(['name', 'score']).Print;
end.
#DataFrameABC

Новый стандартный модуль DataFrameABC В PascalABC.NET 3.11.1 beta появился модуль DataFrameABC для работы с датафреймами. Он
Новый стандартный модуль DataFrameABC В PascalABC.NET 3.11.1 beta появился модуль DataFrameABC для работы с датафреймами. Он совмещает идеи pandas и преимущества компилируемых языков. Возможности: 4 типа столбцов: Int, Str, Bool, Float Считывание из CSV и текстовой строки И многое другое... Пример 1. Загрузка и просмотр данных
uses DataFrameABC;

begin
  var df := DataFrame.FromCsvText('''
  name,age,score
  Alice,20,85
  Bob,22,90
  Charlie,21,78
  ''');
  
  df.Print;
end.
#DataFrameABC

Связка методов GroupBy и Each - словарь характеристик групп Открываем красоту LINQ в сочетании с элегантностью PascalABC.NET.
Связка методов GroupBy и Each - словарь характеристик групп Открываем красоту LINQ в сочетании с элегантностью PascalABC.NET. Смотрите, как легко делать аналитику данных:
type 
  Product = auto class
    Category: string;
    Model: string;    
    Price: real;
    Rating: real;
  end;

begin
  var products := 
[
  new Product('Phones', 'iPhone 13', 499.99, 4.5),
  new Product('Phones', 'Galaxy S21', 699.99, 4.7),
  new Product('Phones', 'iPhone 13', 299.99, 4.2),  
  new Product('Laptops', 'MacBook', 999.99, 4.8),
  new Product('Laptops', 'MacBook', 1299.99, 4.9), 
  new Product('Tablets', 'iPad Air', 399.99, 4.3),
  new Product('Tablets', 'iPad Air', 399.99, 4.3)   
];

  // 1. Количество уникальных моделей по категориям
  var uniqueModels := products
    .GroupBy(p -> p.Category)
    .Each(g -> g.DistinctBy(p -> p.Model).Count);
  
  // 2. Средняя цена по категориям
  var avgPrices := products
    .GroupBy(p -> p.Category)
    .Each(g -> g.Average(p -> p.Price));
  
  // 3. Количество товаров по категориям
  var totalCounts := products
    .GroupBy(p -> p.Category)
    .Each(g -> g.Count);
  
  Println('Уникальные модели по категориям:');
  uniqueModels.PrintLines(kv -> $'  {kv.Key}: {kv.Value}');

  Println('Средняя цена по категориям:');
  avgPrices.PrintLines(kv -> $'  {kv.Key}: ${kv.Value:F2}');

  Println('Всего товаров по категориям:');
  totalCounts.PrintLines(kv -> $'  {kv.Key}: {kv.Value}');
end.
Почему этот подход — находка: 🎯 .GroupBy() + .Each() — идеальная пара для групповых операций 🎯 Автоматический словарь — .Each() сам возвращает Dictionary<K,V> 🎯 Читаемость — код говорит сам за себя: "сгруппируй и для каждой группы посчитай" 🎯 Расширяемость — подходит для любых агрегаций: Average, Sum, Min, Max, DistinctBy Современный PascalABC.NET - для реальной аналитики данных!

Лаконичные вычисления для матриц Насколько выразительной и компактной может быть запись алгоритмов, в которых сначала вычисля
Лаконичные вычисления для матриц Насколько выразительной и компактной может быть запись алгоритмов, в которых сначала вычисляется некоторая характеристика строк или столбцов матрицы, а затем — агрегированная характеристика по всем полученным значениям! Например, одной строкой можно найти максимум сумм строк матрицы. Точно так же просто вычисляется среднее значение минимумов её столбцов.
begin
  var a := MatrRandom;
  a.Println;
  // Максимум сумм строк
  a.Rows.Max(row -> row.Sum).Println;
  // Среднее минимумов столбцов
  a.Cols.Average(col -> col.Min).Println;
end.

Прямо сейчас студенты 1 курса ФИИТ сдают экзамен по Основам программирования. И подошли к делу очень творчески :) Оценка - от
Прямо сейчас студенты 1 курса ФИИТ сдают экзамен по Основам программирования. И подошли к делу очень творчески :) Оценка - отлично!

Во всех ли строках матрицы есть четные элементы? Решение с помощью комбинации методов All и Any begin var a := MatrRandom(5,3
Во всех ли строках матрицы есть четные элементы? Решение с помощью комбинации методов All и Any
begin
  var a := MatrRandom(5,3);
  a.Println;
  a.Rows.All(row -> row.Any(x -> x.IsEven)).Print;
end.

Метод последовательности FirstOrDefault Метод последовательности FirstOrDefault позволяет заменять цикл с break. Он работает
Метод последовательности FirstOrDefault Метод последовательности FirstOrDefault позволяет заменять цикл с break. Он работает лениво и выходит из вычислений в тот момент как найден элемент, удовлетворяющий условию - всё как в цикле break. Единственный недостаток - в случае неудачи возвращает значение по умолчанию - данном случае 0.
begin
  var a := ArrRandomInteger(20,1,20);
  a.Println;
  var res := a.FirstOrDefault(x -> x > 17);
  Print(res);
  
  res := 0;
  foreach var x in a do
    if x > 17 then
    begin
      res := x;
      break;
    end;
  Print(res);      
end.

🎄 С Новым 2026 годом! Друзья, с наступающим Новым годом! Спасибо, что этот год вы провели вместе с PascalABC.NET — в обсужде
🎄 С Новым 2026 годом! Друзья, с наступающим Новым годом! Спасибо, что этот год вы провели вместе с PascalABC.NET — в обсуждении задач, примеров, поиске красивых решений. Пусть в 2026 году: 🔷 код будет читаемым и лаконичным, 🔶 типы станут надёжной путеводной звездой, 🔷 алгоритмы — интересными и быстрыми, 🔶 а изучение программирования будет приносить удовольствие и уверенность в результате. В новом году мы планируем важный шаг — перевод PascalABC.NET на .NET 9.0 и дальнейшее развитие инструментов для обучения современному программированию. Спасибо, что остаетесь с нами, делитесь идеями и проблемами, задаёте вопросы и используете PascalABC.NET в обучении и работе. До встречи в 2026 году — он уже почти скомпилировался :)

Сколько слов в строке каждой длины Если строка состоит из слов, легко посчитать, сколько слов каждой длины, используя комбина
Сколько слов в строке каждой длины Если строка состоит из слов, легко посчитать, сколько слов каждой длины, используя комбинацию методов GropupBy и Each. Метод Each возвращает словарь, который можно отсортировать по ключу и вывести
begin  
  var s := 'как однажды жак звонарь головой сломал фонарь';
  s.ToWords
   .GroupBy(word -> word.Length)
   .Each(word -> word.Count)
   .OrderBy(kv -> kv.Key)
   .PrintLines(kv -> $'{kv.Key}-буквенных - {kv.Value} шт')
end.

match — это case по типам В современном PascalABC.NET можно элегантно обрабатывать значение в зависимости от его типа, а не т
match — это case по типам В современном PascalABC.NET можно элегантно обрабатывать значение в зависимости от его типа, а не только от значения.
begin
  var obj: object := 'Hello PascalABC.NET!';
  
  match obj with
    integer(i): Println(i * i);
    string(s):  Println(s.Length);
    else        Println(TypeName(obj));
  end;
end.
Что важно: 🔹выбор ветки происходит по типу объекта 🔹при совпадении тип сразу доступен в переменной (i, s) 🔹код получается короче и понятнее, чем цепочки if obj is ... По сути, это case, который работает с типами.

Без слов :)
Без слов :)

2000 подписчиков в нашем телеграм-канале! Прямо сейчас: нас - 2000! 👉 https://tgstat.ru/channel/@pascalabc_official/stat И э
2000 подписчиков в нашем телеграм-канале! Прямо сейчас: нас - 2000! 👉 https://tgstat.ru/channel/@pascalabc_official/stat И это особенно приятно, потому что канал растёт естественно: 🔹без накруток 🔹без покупной рекламы 🔹без «случайных» подписчиков Здесь собираются те, кому действительно интересен современный PascalABC.NET: 🔹живые примеры кода 🔹новые возможности языка 🔹приёмы, о которых не пишут в учебниках 🔹актуальные подходы и современные парадигмы программирования Спасибо каждому, кто читает, думает, пробует и пишет код на PascalABC.NET вместе с нами 🚀

Фабрика предикатов Напишем функцию, которая возвращает лямбду-предикат с параметром. Функция принимает параметр, лямбда его з
Фабрика предикатов Напишем функцию, которая возвращает лямбду-предикат с параметром. Функция принимает параметр, лямбда его захватывает. В результате вместо лямбды можно писать вызов функции с параметром
function less(a: integer): integer -> boolean
  := x -> x < a;

begin
  Arr(1..9).Where(less(5)).Print
end.

Решето Эратосфена - максимально компактно и понятно Решето Эратосфена — это один из наиболее эффективных алгоритмов для нахож
Решето Эратосфена - максимально компактно и понятно Решето Эратосфена — это один из наиболее эффективных алгоритмов для нахождения всех простых чисел до заданного предела n. Он отличается высокой производительностью и простотой реализации. Алгоритм обладает асимптотической сложностью O(n * log ⁡log ⁡n), что делает его значительно быстрее простейших методов определения простоты через деление.
##
function SieveOfEratosthenes(n: integer): array of integer;
begin
  var isPrime := [False] * 2 + [True] * (n - 1); 

  for var i := 2 to ISqrt(n) do
    if isPrime[i] then
      for var j := i * i to n step i do
        isPrime[j] := False;

  Result := (2..n).Where(i -> isPrime[i]).ToArray;
end;

SieveOfEratosthenes(1000).Println;
А что такое ISqrt(n) - читайте в справке!

Находим элементы, встречающиеся в последовательности ровно один раз Используем два множества: одно для потенциально уникальных значений, второе — для повторяющихся.
begin
  var data := [1, 2, 3, 2, 4, 5, 3, 6, 7, 1, 8, 9, 4, 10];
  data.Println;
  
  var unique, multi: set of integer; 
  
  foreach var num in data do
  begin
    if num in multi then
      continue;
    if num in unique then
    begin
      unique -= num;
      multi += num;
    end 
    else unique += num;
  end;
  
  unique.Order.Println;
end.
Ровно один раз встретившиеся элементы выводятся в отсортированном виде.