diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 7b788f2e1..cb649bbb1 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "8"; public const string Build = "0"; - public const string Revision = "2951"; + public const string Revision = "2953"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index cde9c1f76..5bbcd0bcf 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %MINOR%=8 -%REVISION%=2951 +%REVISION%=2953 %COREVERSION%=0 %MAJOR%=3 diff --git a/PABCNetHelp/Common/main.html b/PABCNetHelp/Common/main.html index 2849dfb3a..b79dc9dff 100644 --- a/PABCNetHelp/Common/main.html +++ b/PABCNetHelp/Common/main.html @@ -88,8 +88,8 @@ Visual Basic.NET, çàïèñè, ìîæíî ïîëüçîâàòüñÿ âñòðîåííûìè â ñòàíäàðòíûå òèïû ìåòîäàìè è ñâîéñòâàìè, ïàìÿòü ïîä îáúåêòû óïðàâëÿåòñÿ ñáîðùèêîì ìóñîðà è íå òðåáóåò ÿâíîãî îñâîáîæäåíèÿ, ìíîæåñòâà -set ìîãóò áûòü -ñîçäàíû íà îñíîâå ïðîèçâîëüíûõ òèïîâ, ââåäåí îïåðàòîðû foreach, ïåðåìåííûå +set ìîãóò áûòü ñîçäàíû íà îñíîâå ïðîèçâîëüíûõ òèïîâ, ââåäåí +îïåðàòîð foreach, ïåðåìåííûå öèêëîâ for è foreach ìîæíî îïèñûâàòü íåïîñðåäñòâåííî â çàãîëîâêå öèêëà, èìåþòñÿ îáîáùåííûå êëàññû è ïîäïðîãðàììû (generics), diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html index 8d06d3f7d..b98f14845 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for IDictionary.html @@ -9,6 +9,8 @@
        Âîçâðàùàåò ñëîâàðü, ñîïîñòàâëÿþùèé êëþ÷ó ãðóïïû ðåçóëüòàò ãðóïïîâîé îïåðàöèè function EachCount<Key,Source>(Self: sequence of System.Linq.IGrouping<Key,Source>): Dictionary<Key,integer>;
        Âîçâðàùàåò ñëîâàðü, ñîïîñòàâëÿþùèé êëþ÷ó ãðóïïû êîëè÷åñòâî ýëåìåíòîâ ñ äàííûì êëþ÷îì +function EachCount<T>(Self: sequence of T): Dictionary<T,integer>; +
        Âîçâðàùàåò ÷àñòîòíûé ñëîâàðü îáúåêòîâ ïîñëåäîâàòåëüíîñòè function Get<Key, Value>(Self: IDictionary<Key, Value>; K: Key): Value;
        Âîçâðàùàåò â ñëîâàðå çíà÷åíèå, ñâÿçàííîå ñ óêàçàííûì êëþ÷îì, à åñëè òàêîãî êëþ÷à íåò, òî çíà÷åíèå ïî óìîë÷àíèþ procedure operator-=<Key,Value>(Self: IDictionary<Key,Value>; k: Key); diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html index 69017439e..19096bc4b 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for array of T.html @@ -28,6 +28,7 @@ +

Ìåòîäû ðàñøèðåíèÿ îäíîìåðíûõ äèíàìè÷åñêèõ ìàññèâîâ

@@ -133,6 +134,12 @@
        Ñîðòèðóåò ìàññèâ ïî âîçðàñòàíèþ procedure Sort<T>(Self: array of T; cmp: (T,T) ->integer);
        Ñîðòèðóåò ìàññèâ ïî âîçðàñòàíèþ, èñïîëüçóÿ cmp â êà÷åñòâå ôóíêöèè ñðàâíåíèÿ ýëåìåíòîâ +procedure Sort<T,T1>(Self: array of T; keySelector: T -> T1); +
        Ñîðòèðóåò ìàññèâ ïî âîçðàñòàíèþ ïî êëþ÷ó +procedure SortDescending<T>(Self: array of T); +
        Ñîðòèðóåò ìàññèâ ïî óáûâàíèþ +procedure SortDescending<T,T1>(Self: array of T; keySelector: T -> T1); +
        Ñîðòèðóåò ìàññèâ ïî óáûâàíèþ ïî êëþ÷ó procedure Transform<T>(Self: array of T; f: T->T);
        Ïðåîáðàçóåò ýëåìåíòû ìàññèâà ïî çàäàííîìó ïðàâèëó procedure Transform<T>(Self: array of T; f: (T,integer)->T); diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html index acaf707f4..7c67ee22b 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Extension methods for real.html @@ -1,8 +1,10 @@ + + @@ -15,12 +17,16 @@

Ìåòîäû ðàñøèðåíèÿ òèïà real

+ + + + + +
function Between(Self: real; a, b: real): boolean;
        Âîçâðàùàåò True åñëè çíà÷åíèå íàõîäèòñÿ ìåæäó äâóìÿ äðóãèìè
function Ceil(Self: real): integer; +
        Âîçâðàùàåò íàìåíüøåå öåëîå, áîëüøåå èëè ðàâíîå âåùåñòâåííîìó ÷èñëó
function Clamp(Self: real; bottom,top: real): real;
        Âîçâðàùàåò ÷èñëî, îãðàíè÷åííîå äèàïàçîíîì îò bottom äî top âêëþ÷èòåëüíî
function ClampBottom(Self: real; bottom: real): real;
        Âîçâðàùàåò ÷èñëî, îãðàíè÷åííîå âåëè÷èíîé bottom ñíèçó
function ClampTop(Self: real; top: real): real;
        Âîçâðàùàåò ÷èñëî, îãðàíè÷åííîå âåëè÷èíîé top ñâåðõó
function Floor(Self: real): integer; +
        Âîçâðàùàåò íàèáîëüøåå öåëîå, ìåíüøåå èëè ðàâíîå âåùåñòâåííîìó ÷èñëó
function InRange(Self: real; a,b: real): boolean;
        Âîçâðàùàåò True åñëè çíà÷åíèå íàõîäèòñÿ ìåæäó äâóìÿ äðóãèìè
function Round(Self: real): integer; diff --git a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html index 10fcad23c..167d61b19 100644 --- a/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html +++ b/PABCNetHelp/LangGuide/PABCSystemUnit/Files/Subroutines for array of T.html @@ -55,15 +55,23 @@
        Ñîðòèðóåò äèíàìè÷åñêèé ìàññèâ ïî êðèòåðèþ ñîðòèðîâêè, çàäàâàåìîìó ôóíêöèåé ñðàâíåíèÿ cmp
procedure Sort<T>(a: array of T; less: (T,T)->boolean);
        Ñîðòèðóåò äèíàìè÷åñêèé ìàññèâ ïî êðèòåðèþ ñîðòèðîâêè, çàäàâàåìîìó ôóíêöèåé ñðàâíåíèÿ less
procedure Sort<T,T1>(var a: array of T; keySelector: T->T1); +
        Ñîðòèðóåò äèíàìè÷åñêèé ìàññèâ ïî êëþ÷ó
procedure Sort<T>(l: List<T>);
        Ñîðòèðóåò ñïèñîê ïî âîçðàñòàíèþ
procedure Sort<T>(l: List<T>; cmp: (T,T)->integer);
        Ñîðòèðóåò ñïèñîê ïî êðèòåðèþ ñîðòèðîâêè, çàäàâàåìîìó ôóíêöèåé ñðàâíåíèÿ cmp
procedure Sort<T>(l: List<T>; less: (T,T)->boolean);
        Ñîðòèðóåò ñïèñîê ïî êðèòåðèþ ñîðòèðîâêè, çàäàâàåìîìó ôóíêöèåé ñðàâíåíèÿ less
procedure Sort<T,T1>(var l: List<T>; keySelector: T->T1); +
        Ñîðòèðóåò ñïèñîê ïî âîçðàñòàíèþ ïî êëþ÷ó
procedure SortDescending<T>(a: array of T);
        Ñîðòèðóåò äèíàìè÷åñêèé ìàññèâ ïî óáûâàíèþ
procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1); +
        Ñîðòèðóåò äèíàìè÷åñêèé ìàññèâ ïî óáûâàíèþ ïî êëþ÷ó
procedure SortDescending<T>(l: List<T>);
        Ñîðòèðóåò ñïèñîê ïî óáûâàíèþ
procedure SortDescending<T,T1>(var l: List<T>; keySelector: T->T1); +
        Ñîðòèðóåò ñïèñîê ïî óáûâàíèþ ïî êëþ÷ó
\ No newline at end of file diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.tags b/Parsers/PascalABCParserNewSaushkin/PABC.tags index f0c899a99..0449a99c2 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.tags +++ b/Parsers/PascalABCParserNewSaushkin/PABC.tags @@ -286,7 +286,6 @@ - @@ -306,7 +305,6 @@ - diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index aebf9da14..ba75d29ce 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -340,6 +340,9 @@ script= + + + diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index c23d45083..3e9b5d700 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.8.0.2951 +3.8.0.2953 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index c9bef9e4a..414e14737 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.8.0.2951' +!define VERSION '3.8.0.2953' diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index 2e7f3c4f4..f84050402 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -2123,16 +2123,24 @@ procedure Sort(a: array of T); procedure Sort(a: array of T; cmp: (T,T)->integer); /// Сортирует динамиче�кий ма��ив по критерию �ортировки, задаваемому функцией �равнени� less procedure Sort(a: array of T; less: (T,T)->boolean); +/// Сортирует динамиче�кий ма��ив по ключу +procedure Sort(var a: array of T; keySelector: T->T1); /// Сортирует �пи�ок по возра�танию procedure Sort(l: List); /// Сортирует �пи�ок по критерию �ортировки, задаваемому функцией �равнени� cmp procedure Sort(l: List; cmp: (T,T)->integer); /// Сортирует �пи�ок по критерию �ортировки, задаваемому функцией �равнени� less procedure Sort(l: List; less: (T,T)->boolean); +/// Сортирует �пи�ок по возра�танию по ключу +procedure Sort(var l: List; keySelector: T->T1); /// Сортирует динамиче�кий ма��ив по убыванию procedure SortDescending(a: array of T); +/// Сортирует динамиче�кий ма��ив по убыванию по ключу +procedure SortDescending(var a: array of T; keySelector: T->T1); /// Сортирует �пи�ок по убыванию procedure SortDescending(l: List); +/// Сортирует �пи�ок по убыванию по ключу +procedure SortDescending(var l: List; keySelector: T->T1); /// Измен�ет пор�док �лементов в динамиче�ком ма��иве на противоположный procedure Reverse(a: array of T); /// Измен�ет пор�док �лементов на противоположный в диапазоне динамиче�кого ма��ива длины count, начина� � индек�а index @@ -8585,11 +8593,21 @@ begin System.Array.Sort(a, (x, y)-> less(x, y) ? -1 : (less(y, x) ? 1 : 0)); end; +procedure Sort(var a: array of T; keySelector: T->T1); +begin + a := a.OrderBy(x->keySelector(x)).ToArray; +end; + procedure Sort(l: List); begin l.Sort(); end; +procedure Sort(var l: List; keySelector: T->T1); +begin + l := l.OrderBy(x->keySelector(x)).ToList; +end; + procedure Sort(l: List; cmp: (T,T)->integer); begin l.Sort(cmp); @@ -8606,12 +8624,22 @@ begin Reverse(a); end; +procedure SortDescending(var a: array of T; keySelector: T->T1); +begin + a := a.OrderByDescending(x->keySelector(x)).ToArray; +end; + procedure SortDescending(l: List); begin Sort(l); Reverse(l); end; +procedure SortDescending(var l: List; keySelector: T->T1); +begin + l := l.OrderByDescending(x->keySelector(x)).ToList; +end; + procedure Reverse(a: array of T); begin System.Array.Reverse(a); @@ -11797,12 +11825,33 @@ begin System.Array.Sort(Self); end; +/// Сортирует ма��ив по убыванию +procedure SortDescending(Self: array of T); extensionmethod; +begin + System.Array.Sort(Self); + Reverse(Self); +end; + /// Сортирует ма��ив по возра�танию, и�пользу� cmp в каче�тве функции �равнени� �лементов procedure Sort(Self: array of T; cmp: (T,T) ->integer); extensionmethod; begin System.Array.Sort(Self, cmp); end; +/// Сортирует ма��ив по возра�танию по ключу +procedure Sort(Self: array of T; keySelector: T -> T1); extensionmethod; +begin + var a := Self.OrderBy(keySelector).ToArray; + System.Array.Copy(a,Self,a.Length); +end; + +/// Сортирует ма��ив по убыванию по ключу +procedure SortDescending(Self: array of T; keySelector: T -> T1); extensionmethod; +begin + var a := Self.OrderByDescending(keySelector).ToArray; + System.Array.Copy(a,Self,a.Length); +end; + /// Возвращает индек� по�леднего �лемента ма��ива function High(Self: System.Array); extensionmethod := High(Self); diff --git a/bin/PascalABCNET.chm b/bin/PascalABCNET.chm index eb0ec9aae..5a42c7a36 100644 Binary files a/bin/PascalABCNET.chm and b/bin/PascalABCNET.chm differ