102 lines
4.6 KiB
HTML
102 lines
4.6 KiB
HTML
<html><head>
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
|
<param name="Keyword" value="Ñðåç">
|
|
<param name="Keyword" value="Áåçîïàñíûé ñðåç">
|
|
</object>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
|
<title></title>
|
|
<link rel="StyleSheet" href="../../default.css">
|
|
<style type="text/css">
|
|
.auto-style1 {
|
|
font-family: monospace;
|
|
font-size: 10pt;
|
|
color: #000080;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body><H1>Ñðåçû</H1>
|
|
<p>Ñðåç - ýòî íàáîð ýëåìåíòîâ äèíàìè÷åñêîãî ìàññèâà, ñïèñêà List<T> èëè ñòðîêè,
|
|
ðàñïîëîæåííûõ ïîñëåäîâàòåëüíî ëèáî ñ íåêîòîðûì øàãîì. </p>
|
|
<p>Ñðåç èìååò âèä:</p>
|
|
<blockquote>
|
|
<code>a[from:to]</code>
|
|
</blockquote>
|
|
<p>èëè</p>
|
|
<blockquote>
|
|
<code>a[from:to:step]</code>
|
|
</blockquote>
|
|
<p>èëè</p>
|
|
<blockquote>
|
|
<code>a?[from:to]</code>
|
|
</blockquote>
|
|
<p>èëè</p>
|
|
<blockquote>
|
|
<code>a?[from:to:step]</code>
|
|
</blockquote>
|
|
<p>è ñîäåðæèò êîïèþ ýëåìåíòîâ èñõîäíîãî êîíòåéíåðà â äèàïàçîíå [<code>from</code>,
|
|
<span class="auto-style1">to</span>) ñ
|
|
øàãîì <span class="auto-style1">step</span>. Çàïèñü [<span class="auto-style1">from</span>,
|
|
<span class="auto-style1">to</span>) îçíà÷àåò, ÷òî ýëåìåíò ñ èíäåêñîì
|
|
<span class="auto-style1">from</span> âêëþ÷àåòñÿ â
|
|
äèàïàçîí, à ýëåìåíò ñ èíäåêñîì <span class="auto-style1">to</span> - íå âêëþ÷àåòñÿ.
|
|
Çíà÷åíèÿ <code>from</code>,
|
|
<span class="auto-style1">to</span>, <span class="auto-style1">step</span>
|
|
äîëæíû áûòü öåëûìè.</p>
|
|
<p>Åñëè <span class="auto-style1">step</span> íå óêàçûâàåòñÿ, òî ïðåäïîëàãàåòñÿ, ÷òî
|
|
<span class="auto-style1">step</span>=1, ò.å. ýëåìåíòû
|
|
ðàñïîëîæåíû íåïðåðûâíî.</p>
|
|
<p>Òèï ñðåçà ñîâïàäàåò ñ òèïîì êîíòåéíåðà: ñðåç ýëåìåíòîâ ìàññèâà ïðåäñòàâëÿåò
|
|
ñîáîé ìàññèâ, ñðåç ñòðîêè - ñòðîêó è ñðåç äëÿ List<T> òàêæå ïðèíàäëåæèò ê òèïó
|
|
List<T>.</p>
|
|
<p>Äëÿ îáû÷íûõ ñðåçîâ èñêëþ÷åíèå ãåíåðèðóåòñÿ â ñëåäóþùèõ ñëó÷àÿõ. Åñëè èíäåêñ <span class="auto-style1">from</span> âûõîäèò çà ãðàíèöû, òî âî
|
|
âðåìÿ âûïîëíåíèÿ ïðîãðàììû âîçíèêàåò èñêëþ÷åíèå. Èíäåêñ
|
|
<span class="auto-style1">to</span> ìîæåò âûõîäèòü çà ãðàíèöû íà 1, ò.å.
|
|
íàõîäèòüñÿ â äèàïàçîíå [-1..a.Count] äëÿ äèíàìè÷åñêèõ ìàññèâîâ è ñïèñêîâ List<T>
|
|
è â äèàïàçîíå [0..s.Length+1] äëÿ ñòðîê, â ïðîòèâíîì ñëó÷àå òàêæå âîçíèêàåò
|
|
èñêëþ÷åíèå. </p>
|
|
<p>Åñëè <span class="auto-style1">
|
|
step</span>=0, òî äëÿ âñåõ âèäîâ ñðåçîâ ãåíåðèðóåòñÿ èñêëþ÷åíèå.</p>
|
|
<p>Ñðåçû âèäà
|
|
<code>a?</code>
|
|
íàçûâàþòñÿ <i>áåçîïàñíûìè ñðåçàìè</i> è âî âñåõ îñòàëüíûõ ñëó÷àÿõ íå ãåíåðèðóþò
|
|
èñêëþ÷åíèé. Îíè ðàáîòàþò ñëåäóþùèì îáðàçîì. Âíà÷àëå êîíòåéíåð ñ÷èòàåòñÿ
|
|
áåñêîíå÷íûì â îáå ñòîðîíû è ñðåç âûáèðàåò â í¸ì îïðåäåë¸ííûå ýëåìåíòû. Ïîñëå
|
|
ýòîãî â ñðåçå îñòàâëÿþòñÿ òîëüêî òå ýëåìåíòû, êîòîðûå ïðèíàäëåæàò èñõîäíîìó
|
|
êîíòåéíåðó.</p>
|
|
<p>Ïðèâåä¸ì ðÿä ïðèìåðîâ:</p>
|
|
<blockquote>
|
|
<p><code><b>var</b> a := Arr(0,1,2,3,4,5,6);<br>Println(a[2:5]); // [2,3,4]<br>
|
|
Println(a[2:a.Length]); // [2,3,4,5,6]<br>Println(a[2:1000]); // Èñêëþ÷åíèå!<br>Println(a?[2:1000]);
|
|
// [2,3,4,5,6]<br>Println(a[2:7:2]); // [2,4,6]<br>
|
|
Println(a[2:0]); // ïóñòîé ìàññèâ<br><b>var</b> s := '0123456';<br>
|
|
Println(s[2:5]); // 123<br>Println(s[0:2]); // Èñêëþ÷åíèå!<br>Println(s?[0:2]);
|
|
// 12<br>Println(s?[-2::2]); // 135<br>Println(s[2:s.Length]); // 12345</code></p>
|
|
</blockquote>
|
|
<p>Øàã <span class="auto-style1">step</span> ìîæåò áûòü îòðèöàòåëüíûì. Íàïðèìåð:</p>
|
|
<blockquote>
|
|
<p><code><b>var</b> a := Arr(0,1,2,3,4,5,6);<br>Println(a[5:2:-1]); //
|
|
[5,4,3]<br>Println(a[2:5:-1]); // ïóñòîé ìàññèâ<br>
|
|
Println(a[a.Length-1:-1:-2]); // [6,4,2,0]</code></p>
|
|
</blockquote>
|
|
<p>Â çàïèñè ñðåçà âûðàæåíèå <span class="auto-style1">from</span> èëè âûðàæåíèå
|
|
<span class="auto-style1">to</span> ìîãóò áûòü ïðîïóùåíû, â ýòîì ñëó÷àå â ñðåç
|
|
ïîïàäàþò âñå ýëåìåíòû ñ ñîîòâåòñòâóþùåé ñòîðîíû. Åñëè <span class="auto-style1">
|
|
step</span>>0, òî ïðîïóùåííûé <span class="auto-style1">from</span> ïîëàãàåòñÿ
|
|
ðàâíûì èíäåêñó ïåðâîãî ýëåìåíòà, ïðîïóùåííûé <span class="auto-style1">to</span>
|
|
ïîëàãàåòñÿ ðàâíûì èíäåêñó ïîñëåäíåãî ýëåìåíòà + 1. Åñëè
|
|
<span class="auto-style1">step</span><0, òî ïðîïóùåííûé
|
|
<span class="auto-style1">from</span> ïîëàãàåòñÿ ðàâíûì èíäåêñó ïîñëåäíåãî
|
|
ýëåìåíòà, à ïðîïóùåííûé <span class="auto-style1">to</span> - èíäåêñó ïåðâîãî
|
|
ýëåìåíòà - 1. </p>
|
|
<p>Íàïðèìåð:</p>
|
|
<blockquote>
|
|
<p><code><b>var</b> s := '0123456';<br>Println(s[2:]); // 23456<br>
|
|
Println(s[:4]); // 012<br>Println(s[::-1]); // 6543210</code></p>
|
|
</blockquote>
|
|
<p>Ðîäñòâåííûì ê ñðåçàì ÿâëÿåòñÿ ìåòîä Slice, îïðåäåëåííûé äëÿ äèíàìè÷åñêèõ
|
|
ìàññèâîâ, ñïèñêîâ List<T>, ñòðîê è ïîñëåäîâàòåëüíîñòåé. Îäíàêî, ñìûñë ïàðàìåòðîâ
|
|
ó íåãî - äðóãîé: a.Slice(from,step,count).</p>
|
|
<p><br>
|
|
</p>
|
|
|
|
</body></html> |