mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-12-26 11:59:33 +01:00
2617 lines
492 KiB
HTML
2617 lines
492 KiB
HTML
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A fixed capacity `Vec`"><title>Vec in heapless - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2,SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-b0742ba02757f159.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="heapless" data-themes="" data-resource-suffix="" data-rustdoc-version="1.83.0 (90b35a623 2024-11-26)" data-channel="1.83.0" data-search-js="search-f0d225181b97f9a4.js" data-settings-js="settings-805db61a62df4bd2.js" ><script src="../static.files/storage-1d39b6787ed640ff.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-f070b9041d14864c.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-0111fcff984fae8f.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle" title="show sidebar"></button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../heapless/index.html">heapless</a><span class="version">0.7.17</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Vec</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#examples" title="Examples">Examples</a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.as_mut_ptr" title="as_mut_ptr">as_mut_ptr</a></li><li><a href="#method.as_ptr" title="as_ptr">as_ptr</a></li><li><a href="#method.as_slice" title="as_slice">as_slice</a></li><li><a href="#method.capacity" title="capacity">capacity</a></li><li><a href="#method.clear" title="clear">clear</a></li><li><a href="#method.ends_with" title="ends_with">ends_with</a></li><li><a href="#method.extend" title="extend">extend</a></li><li><a href="#method.extend_from_slice" title="extend_from_slice">extend_from_slice</a></li><li><a href="#method.from_slice" title="from_slice">from_slice</a></li><li><a href="#method.insert" title="insert">insert</a></li><li><a href="#method.into_array" title="into_array">into_array</a></li><li><a href="#method.is_empty" title="is_empty">is_empty</a></li><li><a href="#method.is_full" title="is_full">is_full</a></li><li><a href="#method.new" title="new">new</a></li><li><a href="#method.pop" title="pop">pop</a></li><li><a href="#method.pop_unchecked" title="pop_unchecked">pop_unchecked</a></li><li><a href="#method.push" title="push">push</a></li><li><a href="#method.push_unchecked" title="push_unchecked">push_unchecked</a></li><li><a href="#method.remove" title="remove">remove</a></li><li><a href="#method.resize" title="resize">resize</a></li><li><a href="#method.resize_default" title="resize_default">resize_default</a></li><li><a href="#method.retain" title="retain">retain</a></li><li><a href="#method.retain_mut" title="retain_mut">retain_mut</a></li><li><a href="#method.set_len" title="set_len">set_len</a></li><li><a href="#method.starts_with" title="starts_with">starts_with</a></li><li><a href="#method.swap_remove" title="swap_remove">swap_remove</a></li><li><a href=
|
|||
|
<h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
|
|||
|
<span class="comment">// A vector with a fixed capacity of 8 elements allocated on the stack
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>vec = Vec::<<span class="kw">_</span>, <span class="number">8</span>>::new();
|
|||
|
vec.push(<span class="number">1</span>);
|
|||
|
vec.push(<span class="number">2</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(vec.len(), <span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(vec[<span class="number">0</span>], <span class="number">1</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(vec.pop(), <span class="prelude-val">Some</span>(<span class="number">2</span>));
|
|||
|
<span class="macro">assert_eq!</span>(vec.len(), <span class="number">1</span>);
|
|||
|
|
|||
|
vec[<span class="number">0</span>] = <span class="number">7</span>;
|
|||
|
<span class="macro">assert_eq!</span>(vec[<span class="number">0</span>], <span class="number">7</span>);
|
|||
|
|
|||
|
vec.extend([<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>].iter().cloned());
|
|||
|
|
|||
|
<span class="kw">for </span>x <span class="kw">in </span><span class="kw-2">&</span>vec {
|
|||
|
<span class="macro">println!</span>(<span class="string">"{}"</span>, x);
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>vec, [<span class="number">7</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]);</code></pre></div>
|
|||
|
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#46-826">source</a><a href="#impl-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.new" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#64-72">source</a><h4 class="code-header">pub const fn <a href="#method.new" class="fn">new</a>() -> Self</h4></section></summary><div class="docblock"><p>Constructs a new, empty vector with a fixed capacity of <code>N</code></p>
|
|||
|
<h5 id="examples-1"><a class="doc-anchor" href="#examples-1">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="comment">// allocate the vector on the stack
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>x: Vec<u8, <span class="number">16</span>> = Vec::new();
|
|||
|
|
|||
|
<span class="comment">// allocate the vector in a static variable
|
|||
|
</span><span class="kw">static </span><span class="kw-2">mut </span>X: Vec<u8, <span class="number">16</span>> = Vec::new();</code></pre></div>
|
|||
|
<p><code>Vec</code> <code>const</code> constructor; wrap the returned value in <a href="../struct.Vec.html"><code>Vec</code></a></p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.from_slice" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#86-93">source</a><h4 class="code-header">pub fn <a href="#method.from_slice" class="fn">from_slice</a>(other: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><Self, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h4></section></summary><div class="docblock"><p>Constructs a new vector with a fixed capacity of <code>N</code> and fills it
|
|||
|
with the provided slice.</p>
|
|||
|
<p>This is equivalent to the following code:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>v: Vec<u8, <span class="number">16</span>> = Vec::new();
|
|||
|
v.extend_from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]).unwrap();</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_ptr" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#111-113">source</a><h4 class="code-header">pub fn <a href="#method.as_ptr" class="fn">as_ptr</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*const T</a></h4></section></summary><div class="docblock"><p>Returns a raw pointer to the vector’s buffer.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_mut_ptr" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#116-118">source</a><h4 class="code-header">pub fn <a href="#method.as_mut_ptr" class="fn">as_mut_ptr</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*mut T</a></h4></section></summary><div class="docblock"><p>Returns a raw pointer to the vector’s buffer, which may be mutated through.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_slice" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#131-135">source</a><h4 class="code-header">pub fn <a href="#method.as_slice" class="fn">as_slice</a>(&self) -> &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a></h4></section></summary><div class="docblock"><p>Extracts a slice containing the entire vector.</p>
|
|||
|
<p>Equivalent to <code>&s[..]</code>.</p>
|
|||
|
<h5 id="examples-2"><a class="doc-anchor" href="#examples-2">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
<span class="kw">let </span>buffer: Vec<u8, <span class="number">5</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>]).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(buffer.as_slice(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.into_array" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#148-161">source</a><h4 class="code-header">pub fn <a href="#method.into_array" class="fn">into_array</a><const M: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; M]</a>, Self></h4></section></summary><div class="docblock"><p>Returns the contents of the vector as an array of length <code>M</code> if the length
|
|||
|
of the vector is exactly <code>M</code>, otherwise returns <code>Err(self)</code>.</p>
|
|||
|
<h5 id="examples-3"><a class="doc-anchor" href="#examples-3">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
<span class="kw">let </span>buffer: Vec<u8, <span class="number">42</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>]).unwrap();
|
|||
|
<span class="kw">let </span>array: [u8; <span class="number">5</span>] = buffer.into_array().unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(array, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.capacity" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#182-184">source</a><h4 class="code-header">pub const fn <a href="#method.capacity" class="fn">capacity</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Returns the maximum number of elements the vector can hold.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.clear" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#187-189">source</a><h4 class="code-header">pub fn <a href="#method.clear" class="fn">clear</a>(&mut self)</h4></section></summary><div class="docblock"><p>Clears the vector, removing all values.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.extend" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#196-203">source</a><h4 class="code-header">pub fn <a href="#method.extend" class="fn">extend</a><I>(&mut self, iter: I)<div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = T>,</div></h4></section></summary><div class="docblock"><p>Extends the vec from an iterator.</p>
|
|||
|
<h5 id="panic"><a class="doc-anchor" href="#panic">§</a>Panic</h5>
|
|||
|
<p>Panics if the vec cannot hold all elements of the iterator.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.extend_from_slice" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#220-235">source</a><h4 class="code-header">pub fn <a href="#method.extend_from_slice" class="fn">extend_from_slice</a>(&mut self, other: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h4></section></summary><div class="docblock"><p>Clones and appends all elements in a slice to the <code>Vec</code>.</p>
|
|||
|
<p>Iterates over the slice <code>other</code>, clones each element, and then appends
|
|||
|
it to this <code>Vec</code>. The <code>other</code> vector is traversed in-order.</p>
|
|||
|
<h5 id="examples-4"><a class="doc-anchor" href="#examples-4">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>vec = Vec::<u8, <span class="number">8</span>>::new();
|
|||
|
vec.push(<span class="number">1</span>).unwrap();
|
|||
|
vec.extend_from_slice(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">*</span>vec, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.pop" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#238-244">source</a><h4 class="code-header">pub fn <a href="#method.pop" class="fn">pop</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><T></h4></section></summary><div class="docblock"><p>Removes the last element from a vector and returns it, or <code>None</code> if it’s empty</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.push" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#249-256">source</a><h4 class="code-header">pub fn <a href="#method.push" class="fn">push</a>(&mut self, item: T) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, T></h4></section></summary><div class="docblock"><p>Appends an <code>item</code> to the back of the collection</p>
|
|||
|
<p>Returns back the <code>item</code> if the vector is full</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.pop_unchecked" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#263-268">source</a><h4 class="code-header">pub unsafe fn <a href="#method.pop_unchecked" class="fn">pop_unchecked</a>(&mut self) -> T</h4></section></summary><div class="docblock"><p>Removes the last element from a vector and returns it</p>
|
|||
|
<h5 id="safety"><a class="doc-anchor" href="#safety">§</a>Safety</h5>
|
|||
|
<p>This assumes the vec to have at least one element.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.push_unchecked" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#275-283">source</a><h4 class="code-header">pub unsafe fn <a href="#method.push_unchecked" class="fn">push_unchecked</a>(&mut self, item: T)</h4></section></summary><div class="docblock"><p>Appends an <code>item</code> to the back of the collection</p>
|
|||
|
<h5 id="safety-1"><a class="doc-anchor" href="#safety-1">§</a>Safety</h5>
|
|||
|
<p>This assumes the vec is not full.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.truncate" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#286-306">source</a><h4 class="code-header">pub fn <a href="#method.truncate" class="fn">truncate</a>(&mut self, len: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Shortens the vector, keeping the first <code>len</code> elements and dropping the rest.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.resize" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#315-332">source</a><h4 class="code-header">pub fn <a href="#method.resize" class="fn">resize</a>(&mut self, new_len: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, value: T) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h4></section></summary><div class="docblock"><p>Resizes the Vec in-place so that len is equal to new_len.</p>
|
|||
|
<p>If new_len is greater than len, the Vec is extended by the
|
|||
|
difference, with each additional slot filled with value. If
|
|||
|
new_len is less than len, the Vec is simply truncated.</p>
|
|||
|
<p>See also <a href="struct.Vec.html#method.resize_default"><code>resize_default</code></a>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.resize_default" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#341-346">source</a><h4 class="code-header">pub fn <a href="#method.resize_default" class="fn">resize_default</a>(&mut self, new_len: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> + <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a>,</div></h4></section></summary><div class="docblock"><p>Resizes the <code>Vec</code> in-place so that <code>len</code> is equal to <code>new_len</code>.</p>
|
|||
|
<p>If <code>new_len</code> is greater than <code>len</code>, the <code>Vec</code> is extended by the
|
|||
|
difference, with each additional slot filled with <code>Default::default()</code>.
|
|||
|
If <code>new_len</code> is less than <code>len</code>, the <code>Vec</code> is simply truncated.</p>
|
|||
|
<p>See also <a href="struct.Vec.html#method.resize"><code>resize</code></a>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_len" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#437-441">source</a><h4 class="code-header">pub unsafe fn <a href="#method.set_len" class="fn">set_len</a>(&mut self, new_len: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Forces the length of the vector to <code>new_len</code>.</p>
|
|||
|
<p>This is a low-level operation that maintains none of the normal
|
|||
|
invariants of the type. Normally changing the length of a vector
|
|||
|
is done using one of the safe operations instead, such as
|
|||
|
<a href="#method.truncate"><code>truncate</code></a>, <a href="#method.resize"><code>resize</code></a>, <a href="https://doc.rust-lang.org/stable/core/iter/trait.Extend.html#tymethod.extend"><code>extend</code></a>, or <a href="#method.clear"><code>clear</code></a>.</p>
|
|||
|
<h5 id="safety-2"><a class="doc-anchor" href="#safety-2">§</a>Safety</h5>
|
|||
|
<ul>
|
|||
|
<li><code>new_len</code> must be less than or equal to <a href="#method.capacity"><code>capacity()</code></a>.</li>
|
|||
|
<li>The elements at <code>old_len..new_len</code> must be initialized.</li>
|
|||
|
</ul>
|
|||
|
<h5 id="examples-5"><a class="doc-anchor" href="#examples-5">§</a>Examples</h5>
|
|||
|
<p>This method can be useful for situations in which the vector
|
|||
|
is serving as a buffer for other code, particularly over FFI:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">pub fn </span>get_dictionary(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Option</span><Vec<u8, <span class="number">32768</span>>> {
|
|||
|
<span class="comment">// Per the FFI method's docs, "32768 bytes is always enough".
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>dict = Vec::new();
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>dict_length = <span class="number">0</span>;
|
|||
|
<span class="comment">// SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that:
|
|||
|
// 1. `dict_length` elements were initialized.
|
|||
|
// 2. `dict_length` <= the capacity (32_768)
|
|||
|
// which makes `set_len` safe to call.
|
|||
|
</span><span class="kw">unsafe </span>{
|
|||
|
<span class="comment">// Make the FFI call...
|
|||
|
</span><span class="kw">let </span>r = deflateGetDictionary(<span class="self">self</span>.strm, dict.as_mut_ptr(), <span class="kw-2">&mut </span>dict_length);
|
|||
|
<span class="kw">if </span>r == Z_OK {
|
|||
|
<span class="comment">// ...and update the length to what was initialized.
|
|||
|
</span>dict.set_len(dict_length);
|
|||
|
<span class="prelude-val">Some</span>(dict)
|
|||
|
} <span class="kw">else </span>{
|
|||
|
<span class="prelude-val">None
|
|||
|
</span>}
|
|||
|
}
|
|||
|
}</code></pre></div>
|
|||
|
<p>While the following example is sound, there is a memory leak since
|
|||
|
the inner vectors were not freed prior to the <code>set_len</code> call:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>core::iter::FromIterator;
|
|||
|
<span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>vec = Vec::<Vec<u8, <span class="number">3</span>>, <span class="number">3</span>>::from_iter(
|
|||
|
[
|
|||
|
Vec::from_iter([<span class="number">1</span>, <span class="number">0</span>, <span class="number">0</span>].iter().cloned()),
|
|||
|
Vec::from_iter([<span class="number">0</span>, <span class="number">1</span>, <span class="number">0</span>].iter().cloned()),
|
|||
|
Vec::from_iter([<span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>].iter().cloned()),
|
|||
|
]
|
|||
|
.iter()
|
|||
|
.cloned()
|
|||
|
);
|
|||
|
<span class="comment">// SAFETY:
|
|||
|
// 1. `old_len..0` is empty so no elements need to be initialized.
|
|||
|
// 2. `0 <= capacity` always holds whatever `capacity` is.
|
|||
|
</span><span class="kw">unsafe </span>{
|
|||
|
vec.set_len(<span class="number">0</span>);
|
|||
|
}</code></pre></div>
|
|||
|
<p>Normally, here, one would use <a href="#method.clear"><code>clear</code></a> instead to correctly drop
|
|||
|
the contents and thus not leak memory.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.swap_remove" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#471-474">source</a><h4 class="code-header">pub fn <a href="#method.swap_remove" class="fn">swap_remove</a>(&mut self, index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> T</h4></section></summary><div class="docblock"><p>Removes an element from the vector and returns it.</p>
|
|||
|
<p>The removed element is replaced by the last element of the vector.</p>
|
|||
|
<p>This does not preserve ordering, but is O(1).</p>
|
|||
|
<h5 id="panics"><a class="doc-anchor" href="#panics">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>index</code> is out of bounds.</p>
|
|||
|
<h5 id="examples-6"><a class="doc-anchor" href="#examples-6">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>v: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::new();
|
|||
|
v.push(<span class="string">"foo"</span>).unwrap();
|
|||
|
v.push(<span class="string">"bar"</span>).unwrap();
|
|||
|
v.push(<span class="string">"baz"</span>).unwrap();
|
|||
|
v.push(<span class="string">"qux"</span>).unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(v.swap_remove(<span class="number">1</span>), <span class="string">"bar"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&*</span>v, [<span class="string">"foo"</span>, <span class="string">"qux"</span>, <span class="string">"baz"</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(v.swap_remove(<span class="number">0</span>), <span class="string">"foo"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&*</span>v, [<span class="string">"baz"</span>, <span class="string">"qux"</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.swap_remove_unchecked" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#503-511">source</a><h4 class="code-header">pub unsafe fn <a href="#method.swap_remove_unchecked" class="fn">swap_remove_unchecked</a>(&mut self, index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> T</h4></section></summary><div class="docblock"><p>Removes an element from the vector and returns it.</p>
|
|||
|
<p>The removed element is replaced by the last element of the vector.</p>
|
|||
|
<p>This does not preserve ordering, but is O(1).</p>
|
|||
|
<h5 id="safety-3"><a class="doc-anchor" href="#safety-3">§</a>Safety</h5>
|
|||
|
<p>Assumes <code>index</code> within bounds.</p>
|
|||
|
<h5 id="examples-7"><a class="doc-anchor" href="#examples-7">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>v: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::new();
|
|||
|
v.push(<span class="string">"foo"</span>).unwrap();
|
|||
|
v.push(<span class="string">"bar"</span>).unwrap();
|
|||
|
v.push(<span class="string">"baz"</span>).unwrap();
|
|||
|
v.push(<span class="string">"qux"</span>).unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw">unsafe </span>{ v.swap_remove_unchecked(<span class="number">1</span>) }, <span class="string">"bar"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&*</span>v, [<span class="string">"foo"</span>, <span class="string">"qux"</span>, <span class="string">"baz"</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw">unsafe </span>{ v.swap_remove_unchecked(<span class="number">0</span>) }, <span class="string">"foo"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&*</span>v, [<span class="string">"baz"</span>, <span class="string">"qux"</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_full" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#515-517">source</a><h4 class="code-header">pub fn <a href="#method.is_full" class="fn">is_full</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns true if the vec is full</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#521-523">source</a><h4 class="code-header">pub fn <a href="#method.is_empty" class="fn">is_empty</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns true if the vec is empty</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.starts_with" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#540-546">source</a><h4 class="code-header">pub fn <a href="#method.starts_with" class="fn">starts_with</a>(&self, needle: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if <code>needle</code> is a prefix of the Vec.</p>
|
|||
|
<p>Always returns <code>true</code> if <code>needle</code> is an empty slice.</p>
|
|||
|
<h5 id="examples-8"><a class="doc-anchor" href="#examples-8">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span>v: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="string">b"abc"</span>).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(v.starts_with(<span class="string">b""</span>), <span class="bool-val">true</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v.starts_with(<span class="string">b"ab"</span>), <span class="bool-val">true</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v.starts_with(<span class="string">b"bc"</span>), <span class="bool-val">false</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.ends_with" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#563-569">source</a><h4 class="code-header">pub fn <a href="#method.ends_with" class="fn">ends_with</a>(&self, needle: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if <code>needle</code> is a suffix of the Vec.</p>
|
|||
|
<p>Always returns <code>true</code> if <code>needle</code> is an empty slice.</p>
|
|||
|
<h5 id="examples-9"><a class="doc-anchor" href="#examples-9">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span>v: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="string">b"abc"</span>).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(v.ends_with(<span class="string">b""</span>), <span class="bool-val">true</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v.ends_with(<span class="string">b"ab"</span>), <span class="bool-val">false</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v.ends_with(<span class="string">b"bc"</span>), <span class="bool-val">true</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.insert" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#591-621">source</a><h4 class="code-header">pub fn <a href="#method.insert" class="fn">insert</a>(&mut self, index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, element: T) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, T></h4></section></summary><div class="docblock"><p>Inserts an element at position <code>index</code> within the vector, shifting all
|
|||
|
elements after it to the right.</p>
|
|||
|
<p>Returns back the <code>element</code> if the vector is full.</p>
|
|||
|
<h5 id="panics-1"><a class="doc-anchor" href="#panics-1">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>index > len</code>.</p>
|
|||
|
<h5 id="examples-10"><a class="doc-anchor" href="#examples-10">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>vec: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]).unwrap();
|
|||
|
vec.insert(<span class="number">1</span>, <span class="number">4</span>);
|
|||
|
<span class="macro">assert_eq!</span>(vec, [<span class="number">1</span>, <span class="number">4</span>, <span class="number">2</span>, <span class="number">3</span>]);
|
|||
|
vec.insert(<span class="number">4</span>, <span class="number">5</span>);
|
|||
|
<span class="macro">assert_eq!</span>(vec, [<span class="number">1</span>, <span class="number">4</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.remove" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#648-669">source</a><h4 class="code-header">pub fn <a href="#method.remove" class="fn">remove</a>(&mut self, index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> T</h4></section></summary><div class="docblock"><p>Removes and returns the element at position <code>index</code> within the vector,
|
|||
|
shifting all elements after it to the left.</p>
|
|||
|
<p>Note: Because this shifts over the remaining elements, it has a
|
|||
|
worst-case performance of <em>O</em>(<em>n</em>). If you don’t need the order of
|
|||
|
elements to be preserved, use <a href="struct.Vec.html#method.swap_remove" title="method heapless::Vec::swap_remove"><code>swap_remove</code></a> instead. If you’d like to
|
|||
|
remove elements from the beginning of the <code>Vec</code>, consider using
|
|||
|
<a href="struct.Deque.html#method.pop_front" title="method heapless::Deque::pop_front"><code>Deque::pop_front</code></a> instead.</p>
|
|||
|
<h5 id="panics-2"><a class="doc-anchor" href="#panics-2">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>index</code> is out of bounds.</p>
|
|||
|
<h5 id="examples-11"><a class="doc-anchor" href="#examples-11">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>v: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(v.remove(<span class="number">1</span>), <span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">3</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.retain" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#699-704">source</a><h4 class="code-header">pub fn <a href="#method.retain" class="fn">retain</a><F>(&mut self, f: F)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Retains only the elements specified by the predicate.</p>
|
|||
|
<p>In other words, remove all elements <code>e</code> for which <code>f(&e)</code> returns <code>false</code>.
|
|||
|
This method operates in place, visiting each element exactly once in the
|
|||
|
original order, and preserves the order of the retained elements.</p>
|
|||
|
<h5 id="examples-12"><a class="doc-anchor" href="#examples-12">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>vec: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]).unwrap();
|
|||
|
vec.retain(|<span class="kw-2">&</span>x| x % <span class="number">2 </span>== <span class="number">0</span>);
|
|||
|
<span class="macro">assert_eq!</span>(vec, [<span class="number">2</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
<p>Because the elements are visited exactly once in the original order,
|
|||
|
external state may be used to decide which elements to keep.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>vec: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]).unwrap();
|
|||
|
<span class="kw">let </span>keep = [<span class="bool-val">false</span>, <span class="bool-val">true</span>, <span class="bool-val">true</span>, <span class="bool-val">false</span>, <span class="bool-val">true</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = keep.iter();
|
|||
|
vec.retain(|<span class="kw">_</span>| <span class="kw-2">*</span>iter.next().unwrap());
|
|||
|
<span class="macro">assert_eq!</span>(vec, [<span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.retain_mut" class="method"><a class="src rightside" href="../src/heapless/vec.rs.html#726-825">source</a><h4 class="code-header">pub fn <a href="#method.retain_mut" class="fn">retain_mut</a><F>(&mut self, f: F)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Retains only the elements specified by the predicate, passing a mutable reference to it.</p>
|
|||
|
<p>In other words, remove all elements <code>e</code> such that <code>f(&mut e)</code> returns <code>false</code>.
|
|||
|
This method operates in place, visiting each element exactly once in the
|
|||
|
original order, and preserves the order of the retained elements.</p>
|
|||
|
<h5 id="examples-13"><a class="doc-anchor" href="#examples-13">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>heapless::Vec;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>vec: Vec<<span class="kw">_</span>, <span class="number">8</span>> = Vec::from_slice(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]).unwrap();
|
|||
|
vec.retain_mut(|x| <span class="kw">if </span><span class="kw-2">*</span>x <= <span class="number">3 </span>{
|
|||
|
<span class="kw-2">*</span>x += <span class="number">1</span>;
|
|||
|
<span class="bool-val">true
|
|||
|
</span>} <span class="kw">else </span>{
|
|||
|
<span class="bool-val">false
|
|||
|
</span>});
|
|||
|
<span class="macro">assert_eq!</span>(vec, [<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
</div></details></div></details></div><details class="toggle big-toggle" open><summary><h2 id="deref-methods-%5BT%5D" class="section-header"><span>Methods from <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>></span><a href="#deref-methods-%5BT%5D" class="anchor">§</a></h2></summary><div id="deref-methods-%5BT%5D-1" class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.as_str" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/ascii/ascii_char.rs.html#564">source</a><h4 class="code-header">pub fn <a href="#method.as_str" class="fn">as_str</a>(&self) -> &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.str.html">str</a></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>ascii_char</code>)</span></div></span></summary><div class="docblock"><p>Views this slice of ASCII characters as a UTF-8 <code>str</code>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_bytes" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/ascii/ascii_char.rs.html#575">source</a><h4 class="code-header">pub fn <a href="#method.as_bytes" class="fn">as_bytes</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html">u8</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>ascii_char</code>)</span></div></span></summary><div class="docblock"><p>Views this slice of ASCII characters as a slice of <code>u8</code> bytes.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_ascii" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#15">source</a></span><h4 class="code-header">pub fn <a href="#method.is_ascii" class="fn">is_ascii</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks if all bytes in this slice are within the ASCII range.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_ascii" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#24">source</a><h4 class="code-header">pub fn <a href="#method.as_ascii" class="fn">as_ascii</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&[<a class="enum" href="https://doc.rust-lang.org/1.83.0/core/ascii/ascii_char/enum.AsciiChar.html" title="enum core::ascii::ascii_char::AsciiChar">AsciiChar</a>]></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>ascii_char</code>)</span></div></span></summary><div class="docblock"><p>If this slice <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.is_ascii" title="method slice::is_ascii"><code>is_ascii</code></a>, returns it as a slice of
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/ascii/ascii_char/enum.AsciiChar.html" title="enum core::ascii::ascii_char::AsciiChar">ASCII characters</a>, otherwise returns <code>None</code>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_ascii_unchecked" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#42">source</a><h4 class="code-header">pub unsafe fn <a href="#method.as_ascii_unchecked" class="fn">as_ascii_unchecked</a>(&self) -> &[<a class="enum" href="https://doc.rust-lang.org/1.83.0/core/ascii/ascii_char/enum.AsciiChar.html" title="enum core::ascii::ascii_char::AsciiChar">AsciiChar</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>ascii_char</code>)</span></div></span></summary><div class="docblock"><p>Converts this slice of bytes into a slice of ASCII characters,
|
|||
|
without checking whether they’re valid.</p>
|
|||
|
<h5 id="safety-4"><a class="doc-anchor" href="#safety-4">§</a>Safety</h5>
|
|||
|
<p>Every byte in the slice must be in <code>0..=127</code>, or else this is UB.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.eq_ignore_ascii_case" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#56">source</a></span><h4 class="code-header">pub fn <a href="#method.eq_ignore_ascii_case" class="fn">eq_ignore_ascii_case</a>(&self, other: &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html">u8</a>]) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks that two slices are an ASCII case-insensitive match.</p>
|
|||
|
<p>Same as <code>to_ascii_lowercase(a) == to_ascii_lowercase(b)</code>,
|
|||
|
but without allocating and copying temporaries.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.make_ascii_uppercase" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#72">source</a></span><h4 class="code-header">pub fn <a href="#method.make_ascii_uppercase" class="fn">make_ascii_uppercase</a>(&mut self)</h4></section></summary><div class="docblock"><p>Converts this slice to its ASCII upper case equivalent in-place.</p>
|
|||
|
<p>ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’,
|
|||
|
but non-ASCII letters are unchanged.</p>
|
|||
|
<p>To return a new uppercased value without modifying the existing one, use
|
|||
|
<a href="#method.to_ascii_uppercase"><code>to_ascii_uppercase</code></a>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.make_ascii_lowercase" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#94">source</a></span><h4 class="code-header">pub fn <a href="#method.make_ascii_lowercase" class="fn">make_ascii_lowercase</a>(&mut self)</h4></section></summary><div class="docblock"><p>Converts this slice to its ASCII lower case equivalent in-place.</p>
|
|||
|
<p>ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’,
|
|||
|
but non-ASCII letters are unchanged.</p>
|
|||
|
<p>To return a new lowercased value without modifying the existing one, use
|
|||
|
<a href="#method.to_ascii_lowercase"><code>to_ascii_lowercase</code></a>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.escape_ascii" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.60.0">1.60.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#118">source</a></span><h4 class="code-header">pub fn <a href="#method.escape_ascii" class="fn">escape_ascii</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/ascii/struct.EscapeAscii.html" title="struct core::slice::ascii::EscapeAscii">EscapeAscii</a><'_></h4></section></summary><div class="docblock"><p>Returns an iterator that produces an escaped version of this slice,
|
|||
|
treating it as an ASCII string.</p>
|
|||
|
<h5 id="examples-14"><a class="doc-anchor" href="#examples-14">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code>
|
|||
|
<span class="kw">let </span>s = <span class="string">b"0\t\r\n'\"\\\x9d"</span>;
|
|||
|
<span class="kw">let </span>escaped = s.escape_ascii().to_string();
|
|||
|
<span class="macro">assert_eq!</span>(escaped, <span class="string">"0\\t\\r\\n\\'\\\"\\\\\\x9d"</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.trim_ascii_start" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#137">source</a></span><h4 class="code-header">pub fn <a href="#method.trim_ascii_start" class="fn">trim_ascii_start</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html">u8</a>]</h4></section></summary><div class="docblock"><p>Returns a byte slice with leading ASCII whitespace bytes removed.</p>
|
|||
|
<p>‘Whitespace’ refers to the definition used by
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html#method.is_ascii_whitespace" title="method u8::is_ascii_whitespace"><code>u8::is_ascii_whitespace</code></a>.</p>
|
|||
|
<h5 id="examples-15"><a class="doc-anchor" href="#examples-15">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>(<span class="string">b" \t hello world\n"</span>.trim_ascii_start(), <span class="string">b"hello world\n"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b" "</span>.trim_ascii_start(), <span class="string">b""</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b""</span>.trim_ascii_start(), <span class="string">b""</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.trim_ascii_end" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#166">source</a></span><h4 class="code-header">pub fn <a href="#method.trim_ascii_end" class="fn">trim_ascii_end</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html">u8</a>]</h4></section></summary><div class="docblock"><p>Returns a byte slice with trailing ASCII whitespace bytes removed.</p>
|
|||
|
<p>‘Whitespace’ refers to the definition used by
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html#method.is_ascii_whitespace" title="method u8::is_ascii_whitespace"><code>u8::is_ascii_whitespace</code></a>.</p>
|
|||
|
<h5 id="examples-16"><a class="doc-anchor" href="#examples-16">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>(<span class="string">b"\r hello world\n "</span>.trim_ascii_end(), <span class="string">b"\r hello world"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b" "</span>.trim_ascii_end(), <span class="string">b""</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b""</span>.trim_ascii_end(), <span class="string">b""</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.trim_ascii" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/ascii.rs.html#196">source</a></span><h4 class="code-header">pub fn <a href="#method.trim_ascii" class="fn">trim_ascii</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html">u8</a>]</h4></section></summary><div class="docblock"><p>Returns a byte slice with leading and trailing ASCII whitespace bytes
|
|||
|
removed.</p>
|
|||
|
<p>‘Whitespace’ refers to the definition used by
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html#method.is_ascii_whitespace" title="method u8::is_ascii_whitespace"><code>u8::is_ascii_whitespace</code></a>.</p>
|
|||
|
<h5 id="examples-17"><a class="doc-anchor" href="#examples-17">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>(<span class="string">b"\r hello world\n "</span>.trim_ascii(), <span class="string">b"hello world"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b" "</span>.trim_ascii(), <span class="string">b""</span>);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b""</span>.trim_ascii(), <span class="string">b""</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.len" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#116">source</a></span><h4 class="code-header">pub fn <a href="#method.len" class="fn">len</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Returns the number of elements in the slice.</p>
|
|||
|
<h5 id="examples-18"><a class="doc-anchor" href="#examples-18">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
<span class="macro">assert_eq!</span>(a.len(), <span class="number">3</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty-1" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#135">source</a></span><h4 class="code-header">pub fn <a href="#method.is_empty-1" class="fn">is_empty</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if the slice has a length of 0.</p>
|
|||
|
<h5 id="examples-19"><a class="doc-anchor" href="#examples-19">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
<span class="macro">assert!</span>(!a.is_empty());
|
|||
|
|
|||
|
<span class="kw">let </span>b: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert!</span>(b.is_empty());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.first" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#154">source</a></span><h4 class="code-header">pub fn <a href="#method.first" class="fn">first</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>></h4></section></summary><div class="docblock"><p>Returns the first element of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-20"><a class="doc-anchor" href="#examples-20">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">10</span>), v.first());
|
|||
|
|
|||
|
<span class="kw">let </span>w: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, w.first());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.first_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#178">source</a></span><h4 class="code-header">pub fn <a href="#method.first_mut" class="fn">first_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>></h4></section></summary><div class="docblock"><p>Returns a mutable reference to the first element of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-21"><a class="doc-anchor" href="#examples-21">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>(first) = x.first_mut() {
|
|||
|
<span class="kw-2">*</span>first = <span class="number">5</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">5</span>, <span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
|
|||
|
<span class="kw">let </span>y: <span class="kw-2">&mut </span>[i32] = <span class="kw-2">&mut </span>[];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, y.first_mut());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_first" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#198">source</a></span><h4 class="code-header">pub fn <a href="#method.split_first" class="fn">split_first</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the first and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-22"><a class="doc-anchor" href="#examples-22">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((first, elements)) = x.split_first() {
|
|||
|
<span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span><span class="number">0</span>);
|
|||
|
<span class="macro">assert_eq!</span>(elements, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_first_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#221">source</a></span><h4 class="code-header">pub fn <a href="#method.split_first_mut" class="fn">split_first_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the first and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-23"><a class="doc-anchor" href="#examples-23">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((first, elements)) = x.split_first_mut() {
|
|||
|
<span class="kw-2">*</span>first = <span class="number">3</span>;
|
|||
|
elements[<span class="number">0</span>] = <span class="number">4</span>;
|
|||
|
elements[<span class="number">1</span>] = <span class="number">5</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_last" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#241">source</a></span><h4 class="code-header">pub fn <a href="#method.split_last" class="fn">split_last</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the last and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-24"><a class="doc-anchor" href="#examples-24">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((last, elements)) = x.split_last() {
|
|||
|
<span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span><span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(elements, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>]);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_last_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#264">source</a></span><h4 class="code-header">pub fn <a href="#method.split_last_mut" class="fn">split_last_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the last and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-25"><a class="doc-anchor" href="#examples-25">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((last, elements)) = x.split_last_mut() {
|
|||
|
<span class="kw-2">*</span>last = <span class="number">3</span>;
|
|||
|
elements[<span class="number">0</span>] = <span class="number">4</span>;
|
|||
|
elements[<span class="number">1</span>] = <span class="number">5</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.last" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#283">source</a></span><h4 class="code-header">pub fn <a href="#method.last" class="fn">last</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>></h4></section></summary><div class="docblock"><p>Returns the last element of the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-26"><a class="doc-anchor" href="#examples-26">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">30</span>), v.last());
|
|||
|
|
|||
|
<span class="kw">let </span>w: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, w.last());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.last_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#307">source</a></span><h4 class="code-header">pub fn <a href="#method.last_mut" class="fn">last_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>></h4></section></summary><div class="docblock"><p>Returns a mutable reference to the last item in the slice, or <code>None</code> if it is empty.</p>
|
|||
|
<h5 id="examples-27"><a class="doc-anchor" href="#examples-27">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>(last) = x.last_mut() {
|
|||
|
<span class="kw-2">*</span>last = <span class="number">10</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">10</span>]);
|
|||
|
|
|||
|
<span class="kw">let </span>y: <span class="kw-2">&mut </span>[i32] = <span class="kw-2">&mut </span>[];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, y.last_mut());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.first_chunk" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#330">source</a></span><h4 class="code-header">pub fn <a href="#method.first_chunk" class="fn">first_chunk</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>></h4></section></summary><div class="docblock"><p>Returns an array reference to the first <code>N</code> items in the slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-28"><a class="doc-anchor" href="#examples-28">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>u = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]), u.first_chunk::<<span class="number">2</span>>());
|
|||
|
|
|||
|
<span class="kw">let </span>v: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[<span class="number">10</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.first_chunk::<<span class="number">2</span>>());
|
|||
|
|
|||
|
<span class="kw">let </span>w: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span>[]), w.first_chunk::<<span class="number">0</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.first_chunk_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#361">source</a></span><h4 class="code-header">pub fn <a href="#method.first_chunk_mut" class="fn">first_chunk_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>></h4></section></summary><div class="docblock"><p>Returns a mutable array reference to the first <code>N</code> items in the slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-29"><a class="doc-anchor" href="#examples-29">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>(first) = x.first_chunk_mut::<<span class="number">2</span>>() {
|
|||
|
first[<span class="number">0</span>] = <span class="number">5</span>;
|
|||
|
first[<span class="number">1</span>] = <span class="number">4</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">5</span>, <span class="number">4</span>, <span class="number">2</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, x.first_chunk_mut::<<span class="number">4</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_first_chunk" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#391">source</a></span><h4 class="code-header">pub fn <a href="#method.split_first_chunk" class="fn">split_first_chunk</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns an array reference to the first <code>N</code> items in the slice and the remaining slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-30"><a class="doc-anchor" href="#examples-30">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((first, elements)) = x.split_first_chunk::<<span class="number">2</span>>() {
|
|||
|
<span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(elements, <span class="kw-2">&</span>[<span class="number">2</span>]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, x.split_first_chunk::<<span class="number">4</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_first_chunk_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#427-429">source</a></span><h4 class="code-header">pub fn <a href="#method.split_first_chunk_mut" class="fn">split_first_chunk_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(
|
|||
|
&mut self,
|
|||
|
) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns a mutable array reference to the first <code>N</code> items in the slice and the remaining
|
|||
|
slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-31"><a class="doc-anchor" href="#examples-31">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((first, elements)) = x.split_first_chunk_mut::<<span class="number">2</span>>() {
|
|||
|
first[<span class="number">0</span>] = <span class="number">3</span>;
|
|||
|
first[<span class="number">1</span>] = <span class="number">4</span>;
|
|||
|
elements[<span class="number">0</span>] = <span class="number">5</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, x.split_first_chunk_mut::<<span class="number">4</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_last_chunk" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#462">source</a></span><h4 class="code-header">pub fn <a href="#method.split_last_chunk" class="fn">split_last_chunk</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>)></h4></section></summary><div class="docblock"><p>Returns an array reference to the last <code>N</code> items in the slice and the remaining slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-32"><a class="doc-anchor" href="#examples-32">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((elements, last)) = x.split_last_chunk::<<span class="number">2</span>>() {
|
|||
|
<span class="macro">assert_eq!</span>(elements, <span class="kw-2">&</span>[<span class="number">0</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, x.split_last_chunk::<<span class="number">4</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_last_chunk_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#498-500">source</a></span><h4 class="code-header">pub fn <a href="#method.split_last_chunk_mut" class="fn">split_last_chunk_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(
|
|||
|
&mut self,
|
|||
|
) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>)></h4></section></summary><div class="docblock"><p>Returns a mutable array reference to the last <code>N</code> items in the slice and the remaining
|
|||
|
slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-33"><a class="doc-anchor" href="#examples-33">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((elements, last)) = x.split_last_chunk_mut::<<span class="number">2</span>>() {
|
|||
|
last[<span class="number">0</span>] = <span class="number">3</span>;
|
|||
|
last[<span class="number">1</span>] = <span class="number">4</span>;
|
|||
|
elements[<span class="number">0</span>] = <span class="number">5</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">5</span>, <span class="number">3</span>, <span class="number">4</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, x.split_last_chunk_mut::<<span class="number">4</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.last_chunk" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#533">source</a></span><h4 class="code-header">pub fn <a href="#method.last_chunk" class="fn">last_chunk</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>></h4></section></summary><div class="docblock"><p>Returns an array reference to the last <code>N</code> items in the slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-34"><a class="doc-anchor" href="#examples-34">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>u = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>]), u.last_chunk::<<span class="number">2</span>>());
|
|||
|
|
|||
|
<span class="kw">let </span>v: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[<span class="number">10</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.last_chunk::<<span class="number">2</span>>());
|
|||
|
|
|||
|
<span class="kw">let </span>w: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span>[]), w.last_chunk::<<span class="number">0</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.last_chunk_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#568">source</a></span><h4 class="code-header">pub fn <a href="#method.last_chunk_mut" class="fn">last_chunk_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>></h4></section></summary><div class="docblock"><p>Returns a mutable array reference to the last <code>N</code> items in the slice.</p>
|
|||
|
<p>If the slice is not at least <code>N</code> in length, this will return <code>None</code>.</p>
|
|||
|
<h5 id="examples-35"><a class="doc-anchor" href="#examples-35">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>(last) = x.last_chunk_mut::<<span class="number">2</span>>() {
|
|||
|
last[<span class="number">0</span>] = <span class="number">10</span>;
|
|||
|
last[<span class="number">1</span>] = <span class="number">20</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">10</span>, <span class="number">20</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, x.last_chunk_mut::<<span class="number">4</span>>());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#603-605">source</a></span><h4 class="code-header">pub fn <a href="#method.get" class="fn">get</a><I>(&self, index: I) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<I as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a>><div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>,</div></h4></section></summary><div class="docblock"><p>Returns a reference to an element or subslice depending on the type of
|
|||
|
index.</p>
|
|||
|
<ul>
|
|||
|
<li>If given a position, returns a reference to the element at that
|
|||
|
position or <code>None</code> if out of bounds.</li>
|
|||
|
<li>If given a range, returns the subslice corresponding to that range,
|
|||
|
or <code>None</code> if out of bounds.</li>
|
|||
|
</ul>
|
|||
|
<h5 id="examples-36"><a class="doc-anchor" href="#examples-36">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">40</span>), v.get(<span class="number">1</span>));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>][..]), v.get(<span class="number">0</span>..<span class="number">2</span>));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.get(<span class="number">3</span>));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.get(<span class="number">0</span>..<span class="number">4</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#628-630">source</a></span><h4 class="code-header">pub fn <a href="#method.get_mut" class="fn">get_mut</a><I>(
|
|||
|
&mut self,
|
|||
|
index: I,
|
|||
|
) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&mut <I as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a>><div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>,</div></h4></section></summary><div class="docblock"><p>Returns a mutable reference to an element or subslice depending on the
|
|||
|
type of index (see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.get" title="method slice::get"><code>get</code></a>) or <code>None</code> if the index is out of bounds.</p>
|
|||
|
<h5 id="examples-37"><a class="doc-anchor" href="#examples-37">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>(elem) = x.get_mut(<span class="number">1</span>) {
|
|||
|
<span class="kw-2">*</span>elem = <span class="number">42</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">42</span>, <span class="number">2</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_unchecked" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#665-667">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.get_unchecked" class="fn">get_unchecked</a><I>(
|
|||
|
&self,
|
|||
|
index: I,
|
|||
|
) -> &<I as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a><div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>,</div></h4></section></summary><div class="docblock"><p>Returns a reference to an element or subslice, without doing bounds
|
|||
|
checking.</p>
|
|||
|
<p>For a safe alternative see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.get" title="method slice::get"><code>get</code></a>.</p>
|
|||
|
<h5 id="safety-5"><a class="doc-anchor" href="#safety-5">§</a>Safety</h5>
|
|||
|
<p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>
|
|||
|
even if the resulting reference is not used.</p>
|
|||
|
<p>You can think of this like <code>.get(index).unwrap_unchecked()</code>. It’s UB
|
|||
|
to call <code>.get_unchecked(len)</code>, even if you immediately convert to a
|
|||
|
pointer. And it’s UB to call <code>.get_unchecked(..len + 1)</code>,
|
|||
|
<code>.get_unchecked(..=len)</code>, or similar.</p>
|
|||
|
<h5 id="examples-38"><a class="doc-anchor" href="#examples-38">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="macro">assert_eq!</span>(x.get_unchecked(<span class="number">1</span>), <span class="kw-2">&</span><span class="number">2</span>);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_unchecked_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#707-709">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.get_unchecked_mut" class="fn">get_unchecked_mut</a><I>(
|
|||
|
&mut self,
|
|||
|
index: I,
|
|||
|
) -> &mut <I as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a><div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>>,</div></h4></section></summary><div class="docblock"><p>Returns a mutable reference to an element or subslice, without doing
|
|||
|
bounds checking.</p>
|
|||
|
<p>For a safe alternative see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.get_mut" title="method slice::get_mut"><code>get_mut</code></a>.</p>
|
|||
|
<h5 id="safety-6"><a class="doc-anchor" href="#safety-6">§</a>Safety</h5>
|
|||
|
<p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>
|
|||
|
even if the resulting reference is not used.</p>
|
|||
|
<p>You can think of this like <code>.get_mut(index).unwrap_unchecked()</code>. It’s
|
|||
|
UB to call <code>.get_unchecked_mut(len)</code>, even if you immediately convert
|
|||
|
to a pointer. And it’s UB to call <code>.get_unchecked_mut(..len + 1)</code>,
|
|||
|
<code>.get_unchecked_mut(..=len)</code>, or similar.</p>
|
|||
|
<h5 id="examples-39"><a class="doc-anchor" href="#examples-39">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>elem = x.get_unchecked_mut(<span class="number">1</span>);
|
|||
|
<span class="kw-2">*</span>elem = <span class="number">13</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">13</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_ptr-1" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#748">source</a></span><h4 class="code-header">pub fn <a href="#method.as_ptr-1" class="fn">as_ptr</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*const T</a></h4></section></summary><div class="docblock"><p>Returns a raw pointer to the slice’s buffer.</p>
|
|||
|
<p>The caller must ensure that the slice outlives the pointer this
|
|||
|
function returns, or else it will end up dangling.</p>
|
|||
|
<p>The caller must also ensure that the memory the pointer (non-transitively) points to
|
|||
|
is never written to (except inside an <code>UnsafeCell</code>) using this pointer or any pointer
|
|||
|
derived from it. If you need to mutate the contents of the slice, use <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.as_mut_ptr" title="method slice::as_mut_ptr"><code>as_mut_ptr</code></a>.</p>
|
|||
|
<p>Modifying the container referenced by this slice may cause its buffer
|
|||
|
to be reallocated, which would also make any pointers to it invalid.</p>
|
|||
|
<h5 id="examples-40"><a class="doc-anchor" href="#examples-40">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
<span class="kw">let </span>x_ptr = x.as_ptr();
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..x.len() {
|
|||
|
<span class="macro">assert_eq!</span>(x.get_unchecked(i), <span class="kw-2">&*</span>x_ptr.add(i));
|
|||
|
}
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_mut_ptr-1" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#779">source</a></span><h4 class="code-header">pub fn <a href="#method.as_mut_ptr-1" class="fn">as_mut_ptr</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*mut T</a></h4></section></summary><div class="docblock"><p>Returns an unsafe mutable pointer to the slice’s buffer.</p>
|
|||
|
<p>The caller must ensure that the slice outlives the pointer this
|
|||
|
function returns, or else it will end up dangling.</p>
|
|||
|
<p>Modifying the container referenced by this slice may cause its buffer
|
|||
|
to be reallocated, which would also make any pointers to it invalid.</p>
|
|||
|
<h5 id="examples-41"><a class="doc-anchor" href="#examples-41">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
<span class="kw">let </span>x_ptr = x.as_mut_ptr();
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..x.len() {
|
|||
|
<span class="kw-2">*</span>x_ptr.add(i) += <span class="number">2</span>;
|
|||
|
}
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">6</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_ptr_range" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.48.0">1.48.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#815">source</a></span><h4 class="code-header">pub fn <a href="#method.as_ptr_range" class="fn">as_ptr_range</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*const T</a>></h4></section></summary><div class="docblock"><p>Returns the two raw pointers spanning the slice.</p>
|
|||
|
<p>The returned range is half-open, which means that the end pointer
|
|||
|
points <em>one past</em> the last element of the slice. This way, an empty
|
|||
|
slice is represented by two equal pointers, and the difference between
|
|||
|
the two pointers represents the size of the slice.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.as_ptr" title="method slice::as_ptr"><code>as_ptr</code></a> for warnings on using these pointers. The end pointer
|
|||
|
requires extra caution, as it does not point to a valid element in the
|
|||
|
slice.</p>
|
|||
|
<p>This function is useful for interacting with foreign interfaces which
|
|||
|
use two pointers to refer to a range of elements in memory, as is
|
|||
|
common in C++.</p>
|
|||
|
<p>It can also be useful to check if a pointer to an element refers to an
|
|||
|
element of this slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
<span class="kw">let </span>x = <span class="kw-2">&</span>a[<span class="number">1</span>] <span class="kw">as </span><span class="kw-2">*const </span><span class="kw">_</span>;
|
|||
|
<span class="kw">let </span>y = <span class="kw-2">&</span><span class="number">5 </span><span class="kw">as </span><span class="kw-2">*const </span><span class="kw">_</span>;
|
|||
|
|
|||
|
<span class="macro">assert!</span>(a.as_ptr_range().contains(<span class="kw-2">&</span>x));
|
|||
|
<span class="macro">assert!</span>(!a.as_ptr_range().contains(<span class="kw-2">&</span>y));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_mut_ptr_range" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.48.0">1.48.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#859">source</a></span><h4 class="code-header">pub fn <a href="#method.as_mut_ptr_range" class="fn">as_mut_ptr_range</a>(&mut self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*mut T</a>></h4></section></summary><div class="docblock"><p>Returns the two unsafe mutable pointers spanning the slice.</p>
|
|||
|
<p>The returned range is half-open, which means that the end pointer
|
|||
|
points <em>one past</em> the last element of the slice. This way, an empty
|
|||
|
slice is represented by two equal pointers, and the difference between
|
|||
|
the two pointers represents the size of the slice.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.as_mut_ptr" title="method slice::as_mut_ptr"><code>as_mut_ptr</code></a> for warnings on using these pointers. The end
|
|||
|
pointer requires extra caution, as it does not point to a valid element
|
|||
|
in the slice.</p>
|
|||
|
<p>This function is useful for interacting with foreign interfaces which
|
|||
|
use two pointers to refer to a range of elements in memory, as is
|
|||
|
common in C++.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.swap" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#890">source</a></span><h4 class="code-header">pub fn <a href="#method.swap" class="fn">swap</a>(&mut self, a: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, b: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Swaps two elements in the slice.</p>
|
|||
|
<p>If <code>a</code> equals to <code>b</code>, it’s guaranteed that elements won’t change value.</p>
|
|||
|
<h5 id="arguments"><a class="doc-anchor" href="#arguments">§</a>Arguments</h5>
|
|||
|
<ul>
|
|||
|
<li>a - The index of the first element</li>
|
|||
|
<li>b - The index of the second element</li>
|
|||
|
</ul>
|
|||
|
<h5 id="panics-3"><a class="doc-anchor" href="#panics-3">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>a</code> or <code>b</code> are out of bounds.</p>
|
|||
|
<h5 id="examples-42"><a class="doc-anchor" href="#examples-42">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>, <span class="string">"e"</span>];
|
|||
|
v.swap(<span class="number">2</span>, <span class="number">4</span>);
|
|||
|
<span class="macro">assert!</span>(v == [<span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"e"</span>, <span class="string">"d"</span>, <span class="string">"c"</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.swap_unchecked" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#933">source</a><h4 class="code-header">pub unsafe fn <a href="#method.swap_unchecked" class="fn">swap_unchecked</a>(&mut self, a: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, b: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_swap_unchecked</code>)</span></div></span></summary><div class="docblock"><p>Swaps two elements in the slice, without doing bounds checking.</p>
|
|||
|
<p>For a safe alternative see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.swap" title="method slice::swap"><code>swap</code></a>.</p>
|
|||
|
<h5 id="arguments-1"><a class="doc-anchor" href="#arguments-1">§</a>Arguments</h5>
|
|||
|
<ul>
|
|||
|
<li>a - The index of the first element</li>
|
|||
|
<li>b - The index of the second element</li>
|
|||
|
</ul>
|
|||
|
<h5 id="safety-7"><a class="doc-anchor" href="#safety-7">§</a>Safety</h5>
|
|||
|
<p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>.
|
|||
|
The caller has to ensure that <code>a < self.len()</code> and <code>b < self.len()</code>.</p>
|
|||
|
<h5 id="examples-43"><a class="doc-anchor" href="#examples-43">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_swap_unchecked)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>];
|
|||
|
<span class="comment">// SAFETY: we know that 1 and 3 are both indices of the slice
|
|||
|
</span><span class="kw">unsafe </span>{ v.swap_unchecked(<span class="number">1</span>, <span class="number">3</span>) };
|
|||
|
<span class="macro">assert!</span>(v == [<span class="string">"a"</span>, <span class="string">"d"</span>, <span class="string">"c"</span>, <span class="string">"b"</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.reverse" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#962">source</a></span><h4 class="code-header">pub fn <a href="#method.reverse" class="fn">reverse</a>(&mut self)</h4></section></summary><div class="docblock"><p>Reverses the order of elements in the slice, in place.</p>
|
|||
|
<h5 id="examples-44"><a class="doc-anchor" href="#examples-44">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
v.reverse();
|
|||
|
<span class="macro">assert!</span>(v == [<span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.iter" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1021">source</a></span><h4 class="code-header">pub fn <a href="#method.iter" class="fn">iter</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.Iter.html" title="struct core::slice::iter::Iter">Iter</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over the slice.</p>
|
|||
|
<p>The iterator yields all items from start to end.</p>
|
|||
|
<h5 id="examples-45"><a class="doc-anchor" href="#examples-45">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iterator = x.iter();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">1</span>));
|
|||
|
<span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">2</span>));
|
|||
|
<span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">4</span>));
|
|||
|
<span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.iter_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1040">source</a></span><h4 class="code-header">pub fn <a href="#method.iter_mut" class="fn">iter_mut</a>(&mut self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.IterMut.html" title="struct core::slice::iter::IterMut">IterMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator that allows modifying each value.</p>
|
|||
|
<p>The iterator yields all items from start to end.</p>
|
|||
|
<h5 id="examples-46"><a class="doc-anchor" href="#examples-46">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
<span class="kw">for </span>elem <span class="kw">in </span>x.iter_mut() {
|
|||
|
<span class="kw-2">*</span>elem += <span class="number">2</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">6</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.windows" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1089">source</a></span><h4 class="code-header">pub fn <a href="#method.windows" class="fn">windows</a>(&self, size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.Windows.html" title="struct core::slice::iter::Windows">Windows</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over all contiguous windows of length
|
|||
|
<code>size</code>. The windows overlap. If the slice is shorter than
|
|||
|
<code>size</code>, the iterator returns no values.</p>
|
|||
|
<h5 id="panics-4"><a class="doc-anchor" href="#panics-4">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>size</code> is 0.</p>
|
|||
|
<h5 id="examples-47"><a class="doc-anchor" href="#examples-47">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.windows(<span class="number">3</span>);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
<p>If the slice is shorter than <code>size</code>:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'f'</span>, <span class="string">'o'</span>, <span class="string">'o'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.windows(<span class="number">4</span>);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
<p>There’s no <code>windows_mut</code>, as that existing would let safe code violate the
|
|||
|
“only one <code>&mut</code> at a time to the same thing” rule. However, you can sometimes
|
|||
|
use <a href="https://doc.rust-lang.org/1.83.0/core/cell/struct.Cell.html#method.as_slice_of_cells" title="method core::cell::Cell::as_slice_of_cells"><code>Cell::as_slice_of_cells</code></a> in
|
|||
|
conjunction with <code>windows</code> to accomplish something similar:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::cell::Cell;
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>array = [<span class="string">'R'</span>, <span class="string">'u'</span>, <span class="string">'s'</span>, <span class="string">'t'</span>, <span class="string">' '</span>, <span class="string">'2'</span>, <span class="string">'0'</span>, <span class="string">'1'</span>, <span class="string">'5'</span>];
|
|||
|
<span class="kw">let </span>slice = <span class="kw-2">&mut </span>array[..];
|
|||
|
<span class="kw">let </span>slice_of_cells: <span class="kw-2">&</span>[Cell<char>] = Cell::from_mut(slice).as_slice_of_cells();
|
|||
|
<span class="kw">for </span>w <span class="kw">in </span>slice_of_cells.windows(<span class="number">3</span>) {
|
|||
|
Cell::swap(<span class="kw-2">&</span>w[<span class="number">0</span>], <span class="kw-2">&</span>w[<span class="number">2</span>]);
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(array, [<span class="string">'s'</span>, <span class="string">'t'</span>, <span class="string">' '</span>, <span class="string">'2'</span>, <span class="string">'0'</span>, <span class="string">'1'</span>, <span class="string">'5'</span>, <span class="string">'u'</span>, <span class="string">'R'</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunks" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1124">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks" class="fn">chunks</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.Chunks.html" title="struct core::slice::iter::Chunks">Chunks</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the
|
|||
|
slice, then the last chunk will not have length <code>chunk_size</code>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_exact" title="method slice::chunks_exact"><code>chunks_exact</code></a> for a variant of this iterator that returns chunks of always exactly
|
|||
|
<code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks" title="method slice::rchunks"><code>rchunks</code></a> for the same iterator but starting at the end of the
|
|||
|
slice.</p>
|
|||
|
<h5 id="panics-5"><a class="doc-anchor" href="#panics-5">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-48"><a class="doc-anchor" href="#examples-48">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunks(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'m'</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunks_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1163">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks_mut" class="fn">chunks_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ChunksMut.html" title="struct core::slice::iter::ChunksMut">ChunksMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the
|
|||
|
length of the slice, then the last chunk will not have length <code>chunk_size</code>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_exact_mut" title="method slice::chunks_exact_mut"><code>chunks_exact_mut</code></a> for a variant of this iterator that returns chunks of always
|
|||
|
exactly <code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks_mut" title="method slice::rchunks_mut"><code>rchunks_mut</code></a> for the same iterator but starting at
|
|||
|
the end of the slice.</p>
|
|||
|
<h5 id="panics-6"><a class="doc-anchor" href="#panics-6">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-49"><a class="doc-anchor" href="#examples-49">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>v.chunks_mut(<span class="number">2</span>) {
|
|||
|
<span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() {
|
|||
|
<span class="kw-2">*</span>elem += count;
|
|||
|
}
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">3</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunks_exact" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1201">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks_exact" class="fn">chunks_exact</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ChunksExact.html" title="struct core::slice::iter::ChunksExact">ChunksExact</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the
|
|||
|
slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be retrieved
|
|||
|
from the <code>remainder</code> function of the iterator.</p>
|
|||
|
<p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the
|
|||
|
resulting code better than in the case of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks" title="method slice::chunks"><code>chunks</code></a>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks" title="method slice::chunks"><code>chunks</code></a> for a variant of this iterator that also returns the remainder as a smaller
|
|||
|
chunk, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks_exact" title="method slice::rchunks_exact"><code>rchunks_exact</code></a> for the same iterator but starting at the end of the slice.</p>
|
|||
|
<h5 id="panics-7"><a class="doc-anchor" href="#panics-7">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-50"><a class="doc-anchor" href="#examples-50">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunks_exact(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());
|
|||
|
<span class="macro">assert_eq!</span>(iter.remainder(), <span class="kw-2">&</span>[<span class="string">'m'</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunks_exact_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1244">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks_exact_mut" class="fn">chunks_exact_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ChunksExactMut.html" title="struct core::slice::iter::ChunksExactMut">ChunksExactMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the
|
|||
|
length of the slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be
|
|||
|
retrieved from the <code>into_remainder</code> function of the iterator.</p>
|
|||
|
<p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the
|
|||
|
resulting code better than in the case of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_mut" title="method slice::chunks_mut"><code>chunks_mut</code></a>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_mut" title="method slice::chunks_mut"><code>chunks_mut</code></a> for a variant of this iterator that also returns the remainder as a
|
|||
|
smaller chunk, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks_exact_mut" title="method slice::rchunks_exact_mut"><code>rchunks_exact_mut</code></a> for the same iterator but starting at the end of
|
|||
|
the slice.</p>
|
|||
|
<h5 id="panics-8"><a class="doc-anchor" href="#panics-8">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-51"><a class="doc-anchor" href="#examples-51">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>v.chunks_exact_mut(<span class="number">2</span>) {
|
|||
|
<span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() {
|
|||
|
<span class="kw-2">*</span>elem += count;
|
|||
|
}
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">0</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_chunks_unchecked" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1279">source</a><h4 class="code-header">pub unsafe fn <a href="#method.as_chunks_unchecked" class="fn">as_chunks_unchecked</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays,
|
|||
|
assuming that there’s no remainder.</p>
|
|||
|
<h5 id="safety-8"><a class="doc-anchor" href="#safety-8">§</a>Safety</h5>
|
|||
|
<p>This may only be called when</p>
|
|||
|
<ul>
|
|||
|
<li>The slice splits exactly into <code>N</code>-element chunks (aka <code>self.len() % N == 0</code>).</li>
|
|||
|
<li><code>N != 0</code>.</li>
|
|||
|
</ul>
|
|||
|
<h5 id="examples-52"><a class="doc-anchor" href="#examples-52">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>slice: <span class="kw-2">&</span>[char] = <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>, <span class="string">'!'</span>];
|
|||
|
<span class="kw">let </span>chunks: <span class="kw-2">&</span>[[char; <span class="number">1</span>]] =
|
|||
|
<span class="comment">// SAFETY: 1-element chunks never have remainder
|
|||
|
</span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked() };
|
|||
|
<span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'l'</span>], [<span class="string">'o'</span>], [<span class="string">'r'</span>], [<span class="string">'e'</span>], [<span class="string">'m'</span>], [<span class="string">'!'</span>]]);
|
|||
|
<span class="kw">let </span>chunks: <span class="kw-2">&</span>[[char; <span class="number">3</span>]] =
|
|||
|
<span class="comment">// SAFETY: The slice length (6) is a multiple of 3
|
|||
|
</span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked() };
|
|||
|
<span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>], [<span class="string">'e'</span>, <span class="string">'m'</span>, <span class="string">'!'</span>]]);
|
|||
|
|
|||
|
<span class="comment">// These would be unsound:
|
|||
|
// let chunks: &[[_; 5]] = slice.as_chunks_unchecked() // The slice length is not a multiple of 5
|
|||
|
// let chunks: &[[_; 0]] = slice.as_chunks_unchecked() // Zero-length chunks are never allowed</span></code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_chunks" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1325">source</a><h4 class="code-header">pub fn <a href="#method.as_chunks" class="fn">as_chunks</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> (&[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>], &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays,
|
|||
|
starting at the beginning of the slice,
|
|||
|
and a remainder slice with length strictly less than <code>N</code>.</p>
|
|||
|
<h5 id="panics-9"><a class="doc-anchor" href="#panics-9">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-53"><a class="doc-anchor" href="#examples-53">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span>(chunks, remainder) = slice.as_chunks();
|
|||
|
<span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'l'</span>, <span class="string">'o'</span>], [<span class="string">'r'</span>, <span class="string">'e'</span>]]);
|
|||
|
<span class="macro">assert_eq!</span>(remainder, <span class="kw-2">&</span>[<span class="string">'m'</span>]);</code></pre></div>
|
|||
|
<p>If you expect the slice to be an exact multiple, you can combine
|
|||
|
<code>let</code>-<code>else</code> with an empty slice pattern:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>slice = [<span class="string">'R'</span>, <span class="string">'u'</span>, <span class="string">'s'</span>, <span class="string">'t'</span>];
|
|||
|
<span class="kw">let </span>(chunks, []) = slice.as_chunks::<<span class="number">2</span>>() <span class="kw">else </span>{
|
|||
|
<span class="macro">panic!</span>(<span class="string">"slice didn't have even length"</span>)
|
|||
|
};
|
|||
|
<span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'R'</span>, <span class="string">'u'</span>], [<span class="string">'s'</span>, <span class="string">'t'</span>]]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_rchunks" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1359">source</a><h4 class="code-header">pub fn <a href="#method.as_rchunks" class="fn">as_rchunks</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>])</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays,
|
|||
|
starting at the end of the slice,
|
|||
|
and a remainder slice with length strictly less than <code>N</code>.</p>
|
|||
|
<h5 id="panics-10"><a class="doc-anchor" href="#panics-10">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-54"><a class="doc-anchor" href="#examples-54">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span>(remainder, chunks) = slice.as_rchunks();
|
|||
|
<span class="macro">assert_eq!</span>(remainder, <span class="kw-2">&</span>[<span class="string">'l'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'o'</span>, <span class="string">'r'</span>], [<span class="string">'e'</span>, <span class="string">'m'</span>]]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.array_chunks" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1399">source</a><h4 class="code-header">pub fn <a href="#method.array_chunks" class="fn">array_chunks</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ArrayChunks.html" title="struct core::slice::iter::ArrayChunks">ArrayChunks</a><'_, T, N></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>array_chunks</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over <code>N</code> elements of the slice at a time, starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<p>The chunks are array references and do not overlap. If <code>N</code> does not divide the
|
|||
|
length of the slice, then the last up to <code>N-1</code> elements will be omitted and can be
|
|||
|
retrieved from the <code>remainder</code> function of the iterator.</p>
|
|||
|
<p>This method is the const generic equivalent of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_exact" title="method slice::chunks_exact"><code>chunks_exact</code></a>.</p>
|
|||
|
<h5 id="panics-11"><a class="doc-anchor" href="#panics-11">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-55"><a class="doc-anchor" href="#examples-55">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(array_chunks)]
|
|||
|
</span><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.array_chunks();
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());
|
|||
|
<span class="macro">assert_eq!</span>(iter.remainder(), <span class="kw-2">&</span>[<span class="string">'m'</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_chunks_unchecked_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1436">source</a><h4 class="code-header">pub unsafe fn <a href="#method.as_chunks_unchecked_mut" class="fn">as_chunks_unchecked_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(
|
|||
|
&mut self,
|
|||
|
) -> &mut [<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays,
|
|||
|
assuming that there’s no remainder.</p>
|
|||
|
<h5 id="safety-9"><a class="doc-anchor" href="#safety-9">§</a>Safety</h5>
|
|||
|
<p>This may only be called when</p>
|
|||
|
<ul>
|
|||
|
<li>The slice splits exactly into <code>N</code>-element chunks (aka <code>self.len() % N == 0</code>).</li>
|
|||
|
<li><code>N != 0</code>.</li>
|
|||
|
</ul>
|
|||
|
<h5 id="examples-56"><a class="doc-anchor" href="#examples-56">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>slice: <span class="kw-2">&mut </span>[char] = <span class="kw-2">&mut </span>[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>, <span class="string">'!'</span>];
|
|||
|
<span class="kw">let </span>chunks: <span class="kw-2">&mut </span>[[char; <span class="number">1</span>]] =
|
|||
|
<span class="comment">// SAFETY: 1-element chunks never have remainder
|
|||
|
</span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked_mut() };
|
|||
|
chunks[<span class="number">0</span>] = [<span class="string">'L'</span>];
|
|||
|
<span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'L'</span>], [<span class="string">'o'</span>], [<span class="string">'r'</span>], [<span class="string">'e'</span>], [<span class="string">'m'</span>], [<span class="string">'!'</span>]]);
|
|||
|
<span class="kw">let </span>chunks: <span class="kw-2">&mut </span>[[char; <span class="number">3</span>]] =
|
|||
|
<span class="comment">// SAFETY: The slice length (6) is a multiple of 3
|
|||
|
</span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked_mut() };
|
|||
|
chunks[<span class="number">1</span>] = [<span class="string">'a'</span>, <span class="string">'x'</span>, <span class="string">'?'</span>];
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'L'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'a'</span>, <span class="string">'x'</span>, <span class="string">'?'</span>]);
|
|||
|
|
|||
|
<span class="comment">// These would be unsound:
|
|||
|
// let chunks: &[[_; 5]] = slice.as_chunks_unchecked_mut() // The slice length is not a multiple of 5
|
|||
|
// let chunks: &[[_; 0]] = slice.as_chunks_unchecked_mut() // Zero-length chunks are never allowed</span></code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_chunks_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1477">source</a><h4 class="code-header">pub fn <a href="#method.as_chunks_mut" class="fn">as_chunks_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&mut self) -> (&mut [<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>], &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays,
|
|||
|
starting at the beginning of the slice,
|
|||
|
and a remainder slice with length strictly less than <code>N</code>.</p>
|
|||
|
<h5 id="panics-12"><a class="doc-anchor" href="#panics-12">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-57"><a class="doc-anchor" href="#examples-57">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">let </span>(chunks, remainder) = v.as_chunks_mut();
|
|||
|
remainder[<span class="number">0</span>] = <span class="number">9</span>;
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>chunks {
|
|||
|
<span class="kw-2">*</span>chunk = [count; <span class="number">2</span>];
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">9</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_rchunks_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1517">source</a><h4 class="code-header">pub fn <a href="#method.as_rchunks_mut" class="fn">as_rchunks_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut [<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; N]</a>])</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays,
|
|||
|
starting at the end of the slice,
|
|||
|
and a remainder slice with length strictly less than <code>N</code>.</p>
|
|||
|
<h5 id="panics-13"><a class="doc-anchor" href="#panics-13">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-58"><a class="doc-anchor" href="#examples-58">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_as_chunks)]
|
|||
|
</span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">let </span>(remainder, chunks) = v.as_rchunks_mut();
|
|||
|
remainder[<span class="number">0</span>] = <span class="number">9</span>;
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>chunks {
|
|||
|
<span class="kw-2">*</span>chunk = [count; <span class="number">2</span>];
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">9</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.array_chunks_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1559">source</a><h4 class="code-header">pub fn <a href="#method.array_chunks_mut" class="fn">array_chunks_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&mut self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ArrayChunksMut.html" title="struct core::slice::iter::ArrayChunksMut">ArrayChunksMut</a><'_, T, N></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>array_chunks</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over <code>N</code> elements of the slice at a time, starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<p>The chunks are mutable array references and do not overlap. If <code>N</code> does not divide
|
|||
|
the length of the slice, then the last up to <code>N-1</code> elements will be omitted and
|
|||
|
can be retrieved from the <code>into_remainder</code> function of the iterator.</p>
|
|||
|
<p>This method is the const generic equivalent of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_exact_mut" title="method slice::chunks_exact_mut"><code>chunks_exact_mut</code></a>.</p>
|
|||
|
<h5 id="panics-14"><a class="doc-anchor" href="#panics-14">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-59"><a class="doc-anchor" href="#examples-59">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(array_chunks)]
|
|||
|
</span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>v.array_chunks_mut() {
|
|||
|
<span class="kw-2">*</span>chunk = [count; <span class="number">2</span>];
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">0</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.array_windows" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1592">source</a><h4 class="code-header">pub fn <a href="#method.array_windows" class="fn">array_windows</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ArrayWindows.html" title="struct core::slice::iter::ArrayWindows">ArrayWindows</a><'_, T, N></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>array_windows</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over overlapping windows of <code>N</code> elements of a slice,
|
|||
|
starting at the beginning of the slice.</p>
|
|||
|
<p>This is the const generic equivalent of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.windows" title="method slice::windows"><code>windows</code></a>.</p>
|
|||
|
<p>If <code>N</code> is greater than the size of the slice, it will return no windows.</p>
|
|||
|
<h5 id="panics-15"><a class="doc-anchor" href="#panics-15">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time
|
|||
|
error before this method gets stabilized.</p>
|
|||
|
<h5 id="examples-60"><a class="doc-anchor" href="#examples-60">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(array_windows)]
|
|||
|
</span><span class="kw">let </span>slice = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.array_windows();
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rchunks" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1627">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks" class="fn">rchunks</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RChunks.html" title="struct core::slice::iter::RChunks">RChunks</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the end
|
|||
|
of the slice.</p>
|
|||
|
<p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the
|
|||
|
slice, then the last chunk will not have length <code>chunk_size</code>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks_exact" title="method slice::rchunks_exact"><code>rchunks_exact</code></a> for a variant of this iterator that returns chunks of always exactly
|
|||
|
<code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks" title="method slice::chunks"><code>chunks</code></a> for the same iterator but starting at the beginning
|
|||
|
of the slice.</p>
|
|||
|
<h5 id="panics-16"><a class="doc-anchor" href="#panics-16">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-61"><a class="doc-anchor" href="#examples-61">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.rchunks(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'e'</span>, <span class="string">'m'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'o'</span>, <span class="string">'r'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rchunks_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1666">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks_mut" class="fn">rchunks_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RChunksMut.html" title="struct core::slice::iter::RChunksMut">RChunksMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the end
|
|||
|
of the slice.</p>
|
|||
|
<p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the
|
|||
|
length of the slice, then the last chunk will not have length <code>chunk_size</code>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks_exact_mut" title="method slice::rchunks_exact_mut"><code>rchunks_exact_mut</code></a> for a variant of this iterator that returns chunks of always
|
|||
|
exactly <code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_mut" title="method slice::chunks_mut"><code>chunks_mut</code></a> for the same iterator but starting at the
|
|||
|
beginning of the slice.</p>
|
|||
|
<h5 id="panics-17"><a class="doc-anchor" href="#panics-17">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-62"><a class="doc-anchor" href="#examples-62">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>v.rchunks_mut(<span class="number">2</span>) {
|
|||
|
<span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() {
|
|||
|
<span class="kw-2">*</span>elem += count;
|
|||
|
}
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rchunks_exact" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1706">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks_exact" class="fn">rchunks_exact</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RChunksExact.html" title="struct core::slice::iter::RChunksExact">RChunksExact</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the
|
|||
|
end of the slice.</p>
|
|||
|
<p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the
|
|||
|
slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be retrieved
|
|||
|
from the <code>remainder</code> function of the iterator.</p>
|
|||
|
<p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the
|
|||
|
resulting code better than in the case of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks" title="method slice::rchunks"><code>rchunks</code></a>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks" title="method slice::rchunks"><code>rchunks</code></a> for a variant of this iterator that also returns the remainder as a smaller
|
|||
|
chunk, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_exact" title="method slice::chunks_exact"><code>chunks_exact</code></a> for the same iterator but starting at the beginning of the
|
|||
|
slice.</p>
|
|||
|
<h5 id="panics-18"><a class="doc-anchor" href="#panics-18">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-63"><a class="doc-anchor" href="#examples-63">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.rchunks_exact(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'e'</span>, <span class="string">'m'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'o'</span>, <span class="string">'r'</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());
|
|||
|
<span class="macro">assert_eq!</span>(iter.remainder(), <span class="kw-2">&</span>[<span class="string">'l'</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rchunks_exact_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1750">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks_exact_mut" class="fn">rchunks_exact_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RChunksExactMut.html" title="struct core::slice::iter::RChunksExactMut">RChunksExactMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the end
|
|||
|
of the slice.</p>
|
|||
|
<p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the
|
|||
|
length of the slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be
|
|||
|
retrieved from the <code>into_remainder</code> function of the iterator.</p>
|
|||
|
<p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the
|
|||
|
resulting code better than in the case of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_mut" title="method slice::chunks_mut"><code>chunks_mut</code></a>.</p>
|
|||
|
<p>See <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.rchunks_mut" title="method slice::rchunks_mut"><code>rchunks_mut</code></a> for a variant of this iterator that also returns the remainder as a
|
|||
|
smaller chunk, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.chunks_exact_mut" title="method slice::chunks_exact_mut"><code>chunks_exact_mut</code></a> for the same iterator but starting at the beginning
|
|||
|
of the slice.</p>
|
|||
|
<h5 id="panics-19"><a class="doc-anchor" href="#panics-19">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>chunk_size</code> is 0.</p>
|
|||
|
<h5 id="examples-64"><a class="doc-anchor" href="#examples-64">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>;
|
|||
|
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>v.rchunks_exact_mut(<span class="number">2</span>) {
|
|||
|
<span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() {
|
|||
|
<span class="kw-2">*</span>elem += count;
|
|||
|
}
|
|||
|
count += <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk_by" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1789-1791">source</a></span><h4 class="code-header">pub fn <a href="#method.chunk_by" class="fn">chunk_by</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ChunkBy.html" title="struct core::slice::iter::ChunkBy">ChunkBy</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over the slice producing non-overlapping runs
|
|||
|
of elements using the predicate to separate them.</p>
|
|||
|
<p>The predicate is called for every pair of consecutive elements,
|
|||
|
meaning that it is called on <code>slice[0]</code> and <code>slice[1]</code>,
|
|||
|
followed by <code>slice[1]</code> and <code>slice[2]</code>, and so on.</p>
|
|||
|
<h5 id="examples-65"><a class="doc-anchor" href="#examples-65">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunk_by(|a, b| a == b);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">3</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
<p>This method can be used to extract the sorted subslices:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>];
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunk_by(|a, b| a <= b);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.chunk_by_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.77.0">1.77.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1830-1832">source</a></span><h4 class="code-header">pub fn <a href="#method.chunk_by_mut" class="fn">chunk_by_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.ChunkByMut.html" title="struct core::slice::iter::ChunkByMut">ChunkByMut</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over the slice producing non-overlapping mutable
|
|||
|
runs of elements using the predicate to separate them.</p>
|
|||
|
<p>The predicate is called for every pair of consecutive elements,
|
|||
|
meaning that it is called on <code>slice[0]</code> and <code>slice[1]</code>,
|
|||
|
followed by <code>slice[1]</code> and <code>slice[2]</code>, and so on.</p>
|
|||
|
<h5 id="examples-66"><a class="doc-anchor" href="#examples-66">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunk_by_mut(|a, b| a == b);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">3</span>, <span class="number">3</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
<p>This method can be used to extract the sorted subslices:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>];
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunk_by_mut(|a, b| a <= b);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">2</span>, <span class="number">3</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_at" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1877">source</a></span><h4 class="code-header">pub fn <a href="#method.split_at" class="fn">split_at</a>(&self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> (&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Divides one slice into two at an index.</p>
|
|||
|
<p>The first will contain all indices from <code>[0, mid)</code> (excluding
|
|||
|
the index <code>mid</code> itself) and the second will contain all
|
|||
|
indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p>
|
|||
|
<h5 id="panics-20"><a class="doc-anchor" href="#panics-20">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>mid > len</code>. For a non-panicking alternative see
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at_checked" title="method slice::split_at_checked"><code>split_at_checked</code></a>.</p>
|
|||
|
<h5 id="examples-67"><a class="doc-anchor" href="#examples-67">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>];
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at(<span class="number">0</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, []);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at(<span class="number">6</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, []);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_at_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1912">source</a></span><h4 class="code-header">pub fn <a href="#method.split_at_mut" class="fn">split_at_mut</a>(&mut self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Divides one mutable slice into two at an index.</p>
|
|||
|
<p>The first will contain all indices from <code>[0, mid)</code> (excluding
|
|||
|
the index <code>mid</code> itself) and the second will contain all
|
|||
|
indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p>
|
|||
|
<h5 id="panics-21"><a class="doc-anchor" href="#panics-21">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>mid > len</code>. For a non-panicking alternative see
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at_mut_checked" title="method slice::split_at_mut_checked"><code>split_at_mut_checked</code></a>.</p>
|
|||
|
<h5 id="examples-68"><a class="doc-anchor" href="#examples-68">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>];
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_mut(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">0</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
left[<span class="number">1</span>] = <span class="number">2</span>;
|
|||
|
right[<span class="number">1</span>] = <span class="number">4</span>;
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_at_unchecked" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.79.0">1.79.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#1963">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.split_at_unchecked" class="fn">split_at_unchecked</a>(&self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> (&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Divides one slice into two at an index, without doing bounds checking.</p>
|
|||
|
<p>The first will contain all indices from <code>[0, mid)</code> (excluding
|
|||
|
the index <code>mid</code> itself) and the second will contain all
|
|||
|
indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p>
|
|||
|
<p>For a safe alternative see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at" title="method slice::split_at"><code>split_at</code></a>.</p>
|
|||
|
<h5 id="safety-10"><a class="doc-anchor" href="#safety-10">§</a>Safety</h5>
|
|||
|
<p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>
|
|||
|
even if the resulting reference is not used. The caller has to ensure that
|
|||
|
<code>0 <= mid <= self.len()</code>.</p>
|
|||
|
<h5 id="examples-69"><a class="doc-anchor" href="#examples-69">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>];
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_unchecked(<span class="number">0</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, []);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_unchecked(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_unchecked(<span class="number">6</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, []);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_at_mut_unchecked" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.79.0">1.79.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2017">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.split_at_mut_unchecked" class="fn">split_at_mut_unchecked</a>(
|
|||
|
&mut self,
|
|||
|
mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>,
|
|||
|
) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Divides one mutable slice into two at an index, without doing bounds checking.</p>
|
|||
|
<p>The first will contain all indices from <code>[0, mid)</code> (excluding
|
|||
|
the index <code>mid</code> itself) and the second will contain all
|
|||
|
indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p>
|
|||
|
<p>For a safe alternative see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at_mut" title="method slice::split_at_mut"><code>split_at_mut</code></a>.</p>
|
|||
|
<h5 id="safety-11"><a class="doc-anchor" href="#safety-11">§</a>Safety</h5>
|
|||
|
<p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>
|
|||
|
even if the resulting reference is not used. The caller has to ensure that
|
|||
|
<code>0 <= mid <= self.len()</code>.</p>
|
|||
|
<h5 id="examples-70"><a class="doc-anchor" href="#examples-70">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>];
|
|||
|
<span class="comment">// scoped to restrict the lifetime of the borrows
|
|||
|
</span><span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_mut_unchecked(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">0</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
left[<span class="number">1</span>] = <span class="number">2</span>;
|
|||
|
right[<span class="number">1</span>] = <span class="number">4</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_at_checked" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2078">source</a></span><h4 class="code-header">pub fn <a href="#method.split_at_checked" class="fn">split_at_checked</a>(&self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Divides one slice into two at an index, returning <code>None</code> if the slice is
|
|||
|
too short.</p>
|
|||
|
<p>If <code>mid ≤ len</code> returns a pair of slices where the first will contain all
|
|||
|
indices from <code>[0, mid)</code> (excluding the index <code>mid</code> itself) and the
|
|||
|
second will contain all indices from <code>[mid, len)</code> (excluding the index
|
|||
|
<code>len</code> itself).</p>
|
|||
|
<p>Otherwise, if <code>mid > len</code>, returns <code>None</code>.</p>
|
|||
|
<h5 id="examples-71"><a class="doc-anchor" href="#examples-71">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">1</span>, -<span class="number">2</span>, <span class="number">3</span>, -<span class="number">4</span>, <span class="number">5</span>, -<span class="number">6</span>];
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_checked(<span class="number">0</span>).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(left, []);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">1</span>, -<span class="number">2</span>, <span class="number">3</span>, -<span class="number">4</span>, <span class="number">5</span>, -<span class="number">6</span>]);
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_checked(<span class="number">2</span>).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, -<span class="number">2</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, -<span class="number">4</span>, <span class="number">5</span>, -<span class="number">6</span>]);
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = v.split_at_checked(<span class="number">6</span>).unwrap();
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, -<span class="number">2</span>, <span class="number">3</span>, -<span class="number">4</span>, <span class="number">5</span>, -<span class="number">6</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, []);
|
|||
|
}
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.split_at_checked(<span class="number">7</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_at_mut_checked" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2118">source</a></span><h4 class="code-header">pub fn <a href="#method.split_at_mut_checked" class="fn">split_at_mut_checked</a>(
|
|||
|
&mut self,
|
|||
|
mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>,
|
|||
|
) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Divides one mutable slice into two at an index, returning <code>None</code> if the
|
|||
|
slice is too short.</p>
|
|||
|
<p>If <code>mid ≤ len</code> returns a pair of slices where the first will contain all
|
|||
|
indices from <code>[0, mid)</code> (excluding the index <code>mid</code> itself) and the
|
|||
|
second will contain all indices from <code>[mid, len)</code> (excluding the index
|
|||
|
<code>len</code> itself).</p>
|
|||
|
<p>Otherwise, if <code>mid > len</code>, returns <code>None</code>.</p>
|
|||
|
<h5 id="examples-72"><a class="doc-anchor" href="#examples-72">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>];
|
|||
|
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Some</span>((left, right)) = v.split_at_mut_checked(<span class="number">2</span>) {
|
|||
|
<span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">0</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
left[<span class="number">1</span>] = <span class="number">2</span>;
|
|||
|
right[<span class="number">1</span>] = <span class="number">4</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.split_at_mut_checked(<span class="number">7</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2170-2172">source</a></span><h4 class="code-header">pub fn <a href="#method.split" class="fn">split</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.Split.html" title="struct core::slice::iter::Split">Split</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match
|
|||
|
<code>pred</code>. The matched element is not contained in the subslices.</p>
|
|||
|
<h5 id="examples-73"><a class="doc-anchor" href="#examples-73">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>, <span class="number">20</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split(|num| num % <span class="number">3 </span>== <span class="number">0</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">20</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
<p>If the first element is matched, an empty slice will be the first item
|
|||
|
returned by the iterator. Similarly, if the last element in the slice
|
|||
|
is matched, an empty slice will be the last item returned by the
|
|||
|
iterator:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split(|num| num % <span class="number">3 </span>== <span class="number">0</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
<p>If two matched elements are directly adjacent, an empty slice will be
|
|||
|
present between them:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">6</span>, <span class="number">33</span>, <span class="number">20</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split(|num| num % <span class="number">3 </span>== <span class="number">0</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">20</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2192-2194">source</a></span><h4 class="code-header">pub fn <a href="#method.split_mut" class="fn">split_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.SplitMut.html" title="struct core::slice::iter::SplitMut">SplitMut</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that
|
|||
|
match <code>pred</code>. The matched element is not contained in the subslices.</p>
|
|||
|
<h5 id="examples-74"><a class="doc-anchor" href="#examples-74">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>];
|
|||
|
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>v.split_mut(|num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
group[<span class="number">0</span>] = <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">1</span>, <span class="number">60</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_inclusive" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2228-2230">source</a></span><h4 class="code-header">pub fn <a href="#method.split_inclusive" class="fn">split_inclusive</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.SplitInclusive.html" title="struct core::slice::iter::SplitInclusive">SplitInclusive</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match
|
|||
|
<code>pred</code>. The matched element is contained in the end of the previous
|
|||
|
subslice as a terminator.</p>
|
|||
|
<h5 id="examples-75"><a class="doc-anchor" href="#examples-75">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>, <span class="number">20</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split_inclusive(|num| num % <span class="number">3 </span>== <span class="number">0</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">20</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
<p>If the last element of the slice is matched,
|
|||
|
that element will be considered the terminator of the preceding slice.
|
|||
|
That slice will be the last item returned by the iterator.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">3</span>, <span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split_inclusive(|num| num % <span class="number">3 </span>== <span class="number">0</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">3</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>]);
|
|||
|
<span class="macro">assert!</span>(iter.next().is_none());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_inclusive_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2252-2254">source</a></span><h4 class="code-header">pub fn <a href="#method.split_inclusive_mut" class="fn">split_inclusive_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.SplitInclusiveMut.html" title="struct core::slice::iter::SplitInclusiveMut">SplitInclusiveMut</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that
|
|||
|
match <code>pred</code>. The matched element is contained in the previous
|
|||
|
subslice as a terminator.</p>
|
|||
|
<h5 id="examples-76"><a class="doc-anchor" href="#examples-76">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>];
|
|||
|
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>v.split_inclusive_mut(|num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
<span class="kw">let </span>terminator_idx = group.len()-<span class="number">1</span>;
|
|||
|
group[terminator_idx] = <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">10</span>, <span class="number">40</span>, <span class="number">1</span>, <span class="number">20</span>, <span class="number">1</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rsplit" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.27.0">1.27.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2288-2290">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplit" class="fn">rsplit</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RSplit.html" title="struct core::slice::iter::RSplit">RSplit</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match
|
|||
|
<code>pred</code>, starting at the end of the slice and working backwards.
|
|||
|
The matched element is not contained in the subslices.</p>
|
|||
|
<h5 id="examples-77"><a class="doc-anchor" href="#examples-77">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">11</span>, <span class="number">22</span>, <span class="number">33</span>, <span class="number">0</span>, <span class="number">44</span>, <span class="number">55</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = slice.rsplit(|num| <span class="kw-2">*</span>num == <span class="number">0</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">44</span>, <span class="number">55</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">11</span>, <span class="number">22</span>, <span class="number">33</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
<p>As with <code>split()</code>, if the first or last element is matched, an empty
|
|||
|
slice will be the first (or last) item returned by the iterator.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>it = v.rsplit(|n| <span class="kw-2">*</span>n % <span class="number">2 </span>== <span class="number">0</span>);
|
|||
|
<span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[]);
|
|||
|
<span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">5</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[]);
|
|||
|
<span class="macro">assert_eq!</span>(it.next(), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rsplit_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.27.0">1.27.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2314-2316">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplit_mut" class="fn">rsplit_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RSplitMut.html" title="struct core::slice::iter::RSplitMut">RSplitMut</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that
|
|||
|
match <code>pred</code>, starting at the end of the slice and working
|
|||
|
backwards. The matched element is not contained in the subslices.</p>
|
|||
|
<h5 id="examples-78"><a class="doc-anchor" href="#examples-78">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">100</span>, <span class="number">400</span>, <span class="number">300</span>, <span class="number">200</span>, <span class="number">600</span>, <span class="number">500</span>];
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">0</span>;
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>v.rsplit_mut(|num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
count += <span class="number">1</span>;
|
|||
|
group[<span class="number">0</span>] = count;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">3</span>, <span class="number">400</span>, <span class="number">300</span>, <span class="number">2</span>, <span class="number">600</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.splitn" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2342-2344">source</a></span><h4 class="code-header">pub fn <a href="#method.splitn" class="fn">splitn</a><F>(&self, n: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.SplitN.html" title="struct core::slice::iter::SplitN">SplitN</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match
|
|||
|
<code>pred</code>, limited to returning at most <code>n</code> items. The matched element is
|
|||
|
not contained in the subslices.</p>
|
|||
|
<p>The last element returned, if any, will contain the remainder of the
|
|||
|
slice.</p>
|
|||
|
<h5 id="examples-79"><a class="doc-anchor" href="#examples-79">§</a>Examples</h5>
|
|||
|
<p>Print the slice split once by numbers divisible by 3 (i.e., <code>[10, 40]</code>,
|
|||
|
<code>[20, 60, 50]</code>):</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>];
|
|||
|
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>v.splitn(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
<span class="macro">println!</span>(<span class="string">"{group:?}"</span>);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.splitn_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2368-2370">source</a></span><h4 class="code-header">pub fn <a href="#method.splitn_mut" class="fn">splitn_mut</a><F>(&mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.SplitNMut.html" title="struct core::slice::iter::SplitNMut">SplitNMut</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that match
|
|||
|
<code>pred</code>, limited to returning at most <code>n</code> items. The matched element is
|
|||
|
not contained in the subslices.</p>
|
|||
|
<p>The last element returned, if any, will contain the remainder of the
|
|||
|
slice.</p>
|
|||
|
<h5 id="examples-80"><a class="doc-anchor" href="#examples-80">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>];
|
|||
|
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>v.splitn_mut(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
group[<span class="number">0</span>] = <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">1</span>, <span class="number">60</span>, <span class="number">50</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rsplitn" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2397-2399">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplitn" class="fn">rsplitn</a><F>(&self, n: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RSplitN.html" title="struct core::slice::iter::RSplitN">RSplitN</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match
|
|||
|
<code>pred</code> limited to returning at most <code>n</code> items. This starts at the end of
|
|||
|
the slice and works backwards. The matched element is not contained in
|
|||
|
the subslices.</p>
|
|||
|
<p>The last element returned, if any, will contain the remainder of the
|
|||
|
slice.</p>
|
|||
|
<h5 id="examples-81"><a class="doc-anchor" href="#examples-81">§</a>Examples</h5>
|
|||
|
<p>Print the slice split once, starting from the end, by numbers divisible
|
|||
|
by 3 (i.e., <code>[50]</code>, <code>[10, 40, 30, 20]</code>):</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>];
|
|||
|
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>v.rsplitn(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
<span class="macro">println!</span>(<span class="string">"{group:?}"</span>);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rsplitn_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2424-2426">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplitn_mut" class="fn">rsplitn_mut</a><F>(&mut self, n: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.RSplitNMut.html" title="struct core::slice::iter::RSplitNMut">RSplitNMut</a><'_, T, F><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match
|
|||
|
<code>pred</code> limited to returning at most <code>n</code> items. This starts at the end of
|
|||
|
the slice and works backwards. The matched element is not contained in
|
|||
|
the subslices.</p>
|
|||
|
<p>The last element returned, if any, will contain the remainder of the
|
|||
|
slice.</p>
|
|||
|
<h5 id="examples-82"><a class="doc-anchor" href="#examples-82">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>s = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>];
|
|||
|
|
|||
|
<span class="kw">for </span>group <span class="kw">in </span>s.rsplitn_mut(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) {
|
|||
|
group[<span class="number">0</span>] = <span class="number">1</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(s, [<span class="number">1</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.split_once" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2451-2453">source</a><h4 class="code-header">pub fn <a href="#method.split_once" class="fn">split_once</a><F>(&self, pred: F) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_split_once</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice on the first element that matches the specified
|
|||
|
predicate.</p>
|
|||
|
<p>If any matching elements are present in the slice, returns the prefix
|
|||
|
before the match and suffix after. The matching element itself is not
|
|||
|
included. If no elements match, returns <code>None</code>.</p>
|
|||
|
<h5 id="examples-83"><a class="doc-anchor" href="#examples-83">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_split_once)]
|
|||
|
</span><span class="kw">let </span>s = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
<span class="macro">assert_eq!</span>(s.split_once(|<span class="kw-2">&</span>x| x == <span class="number">2</span>), <span class="prelude-val">Some</span>((
|
|||
|
<span class="kw-2">&</span>[<span class="number">1</span>][..],
|
|||
|
<span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">2</span>, <span class="number">4</span>][..]
|
|||
|
)));
|
|||
|
<span class="macro">assert_eq!</span>(s.split_once(|<span class="kw-2">&</span>x| x == <span class="number">0</span>), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rsplit_once" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2479-2481">source</a><h4 class="code-header">pub fn <a href="#method.rsplit_once" class="fn">rsplit_once</a><F>(&self, pred: F) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_split_once</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice on the last element that matches the specified
|
|||
|
predicate.</p>
|
|||
|
<p>If any matching elements are present in the slice, returns the prefix
|
|||
|
before the match and suffix after. The matching element itself is not
|
|||
|
included. If no elements match, returns <code>None</code>.</p>
|
|||
|
<h5 id="examples-84"><a class="doc-anchor" href="#examples-84">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_split_once)]
|
|||
|
</span><span class="kw">let </span>s = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
<span class="macro">assert_eq!</span>(s.rsplit_once(|<span class="kw-2">&</span>x| x == <span class="number">2</span>), <span class="prelude-val">Some</span>((
|
|||
|
<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>][..],
|
|||
|
<span class="kw-2">&</span>[<span class="number">4</span>][..]
|
|||
|
)));
|
|||
|
<span class="macro">assert_eq!</span>(s.rsplit_once(|<span class="kw-2">&</span>x| x == <span class="number">0</span>), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.contains" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2515-2517">source</a></span><h4 class="code-header">pub fn <a href="#method.contains" class="fn">contains</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if the slice contains an element with the given value.</p>
|
|||
|
<p>This operation is <em>O</em>(<em>n</em>).</p>
|
|||
|
<p>Note that if you have a sorted slice, <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search" title="method slice::binary_search"><code>binary_search</code></a> may be faster.</p>
|
|||
|
<h5 id="examples-85"><a class="doc-anchor" href="#examples-85">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert!</span>(v.contains(<span class="kw-2">&</span><span class="number">30</span>));
|
|||
|
<span class="macro">assert!</span>(!v.contains(<span class="kw-2">&</span><span class="number">50</span>));</code></pre></div>
|
|||
|
<p>If you do not have a <code>&T</code>, but some other value that you can compare
|
|||
|
with one (for example, <code>String</code> implements <code>PartialEq<str></code>), you can
|
|||
|
use <code>iter().any</code>:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [String::from(<span class="string">"hello"</span>), String::from(<span class="string">"world"</span>)]; <span class="comment">// slice of `String`
|
|||
|
</span><span class="macro">assert!</span>(v.iter().any(|e| e == <span class="string">"hello"</span>)); <span class="comment">// search with `&str`
|
|||
|
</span><span class="macro">assert!</span>(!v.iter().any(|e| e == <span class="string">"hi"</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.starts_with-1" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2545-2547">source</a></span><h4 class="code-header">pub fn <a href="#method.starts_with-1" class="fn">starts_with</a>(&self, needle: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if <code>needle</code> is a prefix of the slice or equal to the slice.</p>
|
|||
|
<h5 id="examples-86"><a class="doc-anchor" href="#examples-86">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[<span class="number">10</span>]));
|
|||
|
<span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]));
|
|||
|
<span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>v));
|
|||
|
<span class="macro">assert!</span>(!v.starts_with(<span class="kw-2">&</span>[<span class="number">50</span>]));
|
|||
|
<span class="macro">assert!</span>(!v.starts_with(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">50</span>]));</code></pre></div>
|
|||
|
<p>Always returns <code>true</code> if <code>needle</code> is an empty slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[]));
|
|||
|
<span class="kw">let </span>v: <span class="kw-2">&</span>[u8] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[]));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.ends_with-1" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2576-2578">source</a></span><h4 class="code-header">pub fn <a href="#method.ends_with-1" class="fn">ends_with</a>(&self, needle: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if <code>needle</code> is a suffix of the slice or equal to the slice.</p>
|
|||
|
<h5 id="examples-87"><a class="doc-anchor" href="#examples-87">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[<span class="number">30</span>]));
|
|||
|
<span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>]));
|
|||
|
<span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>v));
|
|||
|
<span class="macro">assert!</span>(!v.ends_with(<span class="kw-2">&</span>[<span class="number">50</span>]));
|
|||
|
<span class="macro">assert!</span>(!v.ends_with(<span class="kw-2">&</span>[<span class="number">50</span>, <span class="number">30</span>]));</code></pre></div>
|
|||
|
<p>Always returns <code>true</code> if <code>needle</code> is an empty slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[]));
|
|||
|
<span class="kw">let </span>v: <span class="kw-2">&</span>[u8] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[]));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.strip_prefix" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2608-2610">source</a></span><h4 class="code-header">pub fn <a href="#method.strip_prefix" class="fn">strip_prefix</a><P>(&self, prefix: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&P</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>><div class="where">where
|
|||
|
P: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/trait.SlicePattern.html" title="trait core::slice::SlicePattern">SlicePattern</a><Item = T> + ?<a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns a subslice with the prefix removed.</p>
|
|||
|
<p>If the slice starts with <code>prefix</code>, returns the subslice after the prefix, wrapped in <code>Some</code>.
|
|||
|
If <code>prefix</code> is empty, simply returns the original slice. If <code>prefix</code> is equal to the
|
|||
|
original slice, returns an empty slice.</p>
|
|||
|
<p>If the slice does not start with <code>prefix</code>, returns <code>None</code>.</p>
|
|||
|
<h5 id="examples-88"><a class="doc-anchor" href="#examples-88">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">30</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[][..]));
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">50</span>]), <span class="prelude-val">None</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">50</span>]), <span class="prelude-val">None</span>);
|
|||
|
|
|||
|
<span class="kw">let </span>prefix : <span class="kw-2">&</span>str = <span class="string">"he"</span>;
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">b"hello"</span>.strip_prefix(prefix.as_bytes()),
|
|||
|
<span class="prelude-val">Some</span>(<span class="string">b"llo"</span>.as_ref()));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.strip_suffix" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2644-2646">source</a></span><h4 class="code-header">pub fn <a href="#method.strip_suffix" class="fn">strip_suffix</a><P>(&self, suffix: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&P</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>><div class="where">where
|
|||
|
P: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/slice/trait.SlicePattern.html" title="trait core::slice::SlicePattern">SlicePattern</a><Item = T> + ?<a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Returns a subslice with the suffix removed.</p>
|
|||
|
<p>If the slice ends with <code>suffix</code>, returns the subslice before the suffix, wrapped in <code>Some</code>.
|
|||
|
If <code>suffix</code> is empty, simply returns the original slice. If <code>suffix</code> is equal to the
|
|||
|
original slice, returns an empty slice.</p>
|
|||
|
<p>If the slice does not end with <code>suffix</code>, returns <code>None</code>.</p>
|
|||
|
<h5 id="examples-89"><a class="doc-anchor" href="#examples-89">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>];
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">30</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>][..]));
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[][..]));
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">50</span>]), <span class="prelude-val">None</span>);
|
|||
|
<span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">50</span>, <span class="number">30</span>]), <span class="prelude-val">None</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.binary_search" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2730-2732">source</a></span><h4 class="code-header">pub fn <a href="#method.binary_search" class="fn">binary_search</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h4></section></summary><div class="docblock"><p>Binary searches this slice for a given element.
|
|||
|
If the slice is not sorted, the returned result is unspecified and
|
|||
|
meaningless.</p>
|
|||
|
<p>If the value is found then <a href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html#variant.Ok" title="variant core::result::Result::Ok"><code>Result::Ok</code></a> is returned, containing the
|
|||
|
index of the matching element. If there are multiple matches, then any
|
|||
|
one of the matches could be returned. The index is chosen
|
|||
|
deterministically, but is subject to change in future versions of Rust.
|
|||
|
If the value is not found then <a href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html#variant.Err" title="variant core::result::Result::Err"><code>Result::Err</code></a> is returned, containing
|
|||
|
the index where a matching element could be inserted while maintaining
|
|||
|
sorted order.</p>
|
|||
|
<p>See also <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search_by" title="method slice::binary_search_by"><code>binary_search_by</code></a>, <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search_by_key" title="method slice::binary_search_by_key"><code>binary_search_by_key</code></a>, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.partition_point" title="method slice::partition_point"><code>partition_point</code></a>.</p>
|
|||
|
<h5 id="examples-90"><a class="doc-anchor" href="#examples-90">§</a>Examples</h5>
|
|||
|
<p>Looks up a series of four elements. The first is found, with a
|
|||
|
uniquely determined position; the second and third are not
|
|||
|
found; the fourth could match any position in <code>[1, 4]</code>.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>];
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">13</span>), <span class="prelude-val">Ok</span>(<span class="number">9</span>));
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">4</span>), <span class="prelude-val">Err</span>(<span class="number">7</span>));
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">100</span>), <span class="prelude-val">Err</span>(<span class="number">13</span>));
|
|||
|
<span class="kw">let </span>r = s.binary_search(<span class="kw-2">&</span><span class="number">1</span>);
|
|||
|
<span class="macro">assert!</span>(<span class="kw">match </span>r { <span class="prelude-val">Ok</span>(<span class="number">1</span>..=<span class="number">4</span>) => <span class="bool-val">true</span>, <span class="kw">_ </span>=> <span class="bool-val">false</span>, });</code></pre></div>
|
|||
|
<p>If you want to find that whole <em>range</em> of matching items, rather than
|
|||
|
an arbitrary matching one, that can be done using <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.partition_point" title="method slice::partition_point"><code>partition_point</code></a>:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>];
|
|||
|
|
|||
|
<span class="kw">let </span>low = s.partition_point(|x| x < <span class="kw-2">&</span><span class="number">1</span>);
|
|||
|
<span class="macro">assert_eq!</span>(low, <span class="number">1</span>);
|
|||
|
<span class="kw">let </span>high = s.partition_point(|x| x <= <span class="kw-2">&</span><span class="number">1</span>);
|
|||
|
<span class="macro">assert_eq!</span>(high, <span class="number">5</span>);
|
|||
|
<span class="kw">let </span>r = s.binary_search(<span class="kw-2">&</span><span class="number">1</span>);
|
|||
|
<span class="macro">assert!</span>((low..high).contains(<span class="kw-2">&</span>r.unwrap()));
|
|||
|
|
|||
|
<span class="macro">assert!</span>(s[..low].iter().all(|<span class="kw-2">&</span>x| x < <span class="number">1</span>));
|
|||
|
<span class="macro">assert!</span>(s[low..high].iter().all(|<span class="kw-2">&</span>x| x == <span class="number">1</span>));
|
|||
|
<span class="macro">assert!</span>(s[high..].iter().all(|<span class="kw-2">&</span>x| x > <span class="number">1</span>));
|
|||
|
|
|||
|
<span class="comment">// For something not found, the "range" of equal items is empty
|
|||
|
</span><span class="macro">assert_eq!</span>(s.partition_point(|x| x < <span class="kw-2">&</span><span class="number">11</span>), <span class="number">9</span>);
|
|||
|
<span class="macro">assert_eq!</span>(s.partition_point(|x| x <= <span class="kw-2">&</span><span class="number">11</span>), <span class="number">9</span>);
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">11</span>), <span class="prelude-val">Err</span>(<span class="number">9</span>));</code></pre></div>
|
|||
|
<p>If you want to insert an item to a sorted vector, while maintaining
|
|||
|
sort order, consider using <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.partition_point" title="method slice::partition_point"><code>partition_point</code></a>:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>s = <span class="macro">vec!</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>];
|
|||
|
<span class="kw">let </span>num = <span class="number">42</span>;
|
|||
|
<span class="kw">let </span>idx = s.partition_point(|<span class="kw-2">&</span>x| x <= num);
|
|||
|
<span class="comment">// If `num` is unique, `s.partition_point(|&x| x < num)` (with `<`) is equivalent to
|
|||
|
// `s.binary_search(&num).unwrap_or_else(|x| x)`, but using `<=` will allow `insert`
|
|||
|
// to shift less elements.
|
|||
|
</span>s.insert(idx, num);
|
|||
|
<span class="macro">assert_eq!</span>(s, [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">42</span>, <span class="number">55</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.binary_search_by" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2781-2783">source</a></span><h4 class="code-header">pub fn <a href="#method.binary_search_by" class="fn">binary_search_by</a><'a, F>(&'a self, f: F) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</div></h4></section></summary><div class="docblock"><p>Binary searches this slice with a comparator function.</p>
|
|||
|
<p>The comparator function should return an order code that indicates
|
|||
|
whether its argument is <code>Less</code>, <code>Equal</code> or <code>Greater</code> the desired
|
|||
|
target.
|
|||
|
If the slice is not sorted or if the comparator function does not
|
|||
|
implement an order consistent with the sort order of the underlying
|
|||
|
slice, the returned result is unspecified and meaningless.</p>
|
|||
|
<p>If the value is found then <a href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html#variant.Ok" title="variant core::result::Result::Ok"><code>Result::Ok</code></a> is returned, containing the
|
|||
|
index of the matching element. If there are multiple matches, then any
|
|||
|
one of the matches could be returned. The index is chosen
|
|||
|
deterministically, but is subject to change in future versions of Rust.
|
|||
|
If the value is not found then <a href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html#variant.Err" title="variant core::result::Result::Err"><code>Result::Err</code></a> is returned, containing
|
|||
|
the index where a matching element could be inserted while maintaining
|
|||
|
sorted order.</p>
|
|||
|
<p>See also <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search" title="method slice::binary_search"><code>binary_search</code></a>, <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search_by_key" title="method slice::binary_search_by_key"><code>binary_search_by_key</code></a>, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.partition_point" title="method slice::partition_point"><code>partition_point</code></a>.</p>
|
|||
|
<h5 id="examples-91"><a class="doc-anchor" href="#examples-91">§</a>Examples</h5>
|
|||
|
<p>Looks up a series of four elements. The first is found, with a
|
|||
|
uniquely determined position; the second and third are not
|
|||
|
found; the fourth could match any position in <code>[1, 4]</code>.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>];
|
|||
|
|
|||
|
<span class="kw">let </span>seek = <span class="number">13</span>;
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)), <span class="prelude-val">Ok</span>(<span class="number">9</span>));
|
|||
|
<span class="kw">let </span>seek = <span class="number">4</span>;
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)), <span class="prelude-val">Err</span>(<span class="number">7</span>));
|
|||
|
<span class="kw">let </span>seek = <span class="number">100</span>;
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)), <span class="prelude-val">Err</span>(<span class="number">13</span>));
|
|||
|
<span class="kw">let </span>seek = <span class="number">1</span>;
|
|||
|
<span class="kw">let </span>r = s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek));
|
|||
|
<span class="macro">assert!</span>(<span class="kw">match </span>r { <span class="prelude-val">Ok</span>(<span class="number">1</span>..=<span class="number">4</span>) => <span class="bool-val">true</span>, <span class="kw">_ </span>=> <span class="bool-val">false</span>, });</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.binary_search_by_key" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.10.0">1.10.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2882-2885">source</a></span><h4 class="code-header">pub fn <a href="#method.binary_search_by_key" class="fn">binary_search_by_key</a><'a, B, F>(
|
|||
|
&'a self,
|
|||
|
b: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&B</a>,
|
|||
|
f: F,
|
|||
|
) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>) -> B,
|
|||
|
B: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h4></section></summary><div class="docblock"><p>Binary searches this slice with a key extraction function.</p>
|
|||
|
<p>Assumes that the slice is sorted by the key, for instance with
|
|||
|
<a href="slice::sort_by_key"><code>sort_by_key</code></a> using the same key extraction function.
|
|||
|
If the slice is not sorted by the key, the returned result is
|
|||
|
unspecified and meaningless.</p>
|
|||
|
<p>If the value is found then <a href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html#variant.Ok" title="variant core::result::Result::Ok"><code>Result::Ok</code></a> is returned, containing the
|
|||
|
index of the matching element. If there are multiple matches, then any
|
|||
|
one of the matches could be returned. The index is chosen
|
|||
|
deterministically, but is subject to change in future versions of Rust.
|
|||
|
If the value is not found then <a href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html#variant.Err" title="variant core::result::Result::Err"><code>Result::Err</code></a> is returned, containing
|
|||
|
the index where a matching element could be inserted while maintaining
|
|||
|
sorted order.</p>
|
|||
|
<p>See also <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search" title="method slice::binary_search"><code>binary_search</code></a>, <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search_by" title="method slice::binary_search_by"><code>binary_search_by</code></a>, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.partition_point" title="method slice::partition_point"><code>partition_point</code></a>.</p>
|
|||
|
<h5 id="examples-92"><a class="doc-anchor" href="#examples-92">§</a>Examples</h5>
|
|||
|
<p>Looks up a series of four elements in a slice of pairs sorted by
|
|||
|
their second elements. The first is found, with a uniquely
|
|||
|
determined position; the second and third are not found; the
|
|||
|
fourth could match any position in <code>[1, 4]</code>.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [(<span class="number">0</span>, <span class="number">0</span>), (<span class="number">2</span>, <span class="number">1</span>), (<span class="number">4</span>, <span class="number">1</span>), (<span class="number">5</span>, <span class="number">1</span>), (<span class="number">3</span>, <span class="number">1</span>),
|
|||
|
(<span class="number">1</span>, <span class="number">2</span>), (<span class="number">2</span>, <span class="number">3</span>), (<span class="number">4</span>, <span class="number">5</span>), (<span class="number">5</span>, <span class="number">8</span>), (<span class="number">3</span>, <span class="number">13</span>),
|
|||
|
(<span class="number">1</span>, <span class="number">21</span>), (<span class="number">2</span>, <span class="number">34</span>), (<span class="number">4</span>, <span class="number">55</span>)];
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search_by_key(<span class="kw-2">&</span><span class="number">13</span>, |<span class="kw-2">&</span>(a, b)| b), <span class="prelude-val">Ok</span>(<span class="number">9</span>));
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search_by_key(<span class="kw-2">&</span><span class="number">4</span>, |<span class="kw-2">&</span>(a, b)| b), <span class="prelude-val">Err</span>(<span class="number">7</span>));
|
|||
|
<span class="macro">assert_eq!</span>(s.binary_search_by_key(<span class="kw-2">&</span><span class="number">100</span>, |<span class="kw-2">&</span>(a, b)| b), <span class="prelude-val">Err</span>(<span class="number">13</span>));
|
|||
|
<span class="kw">let </span>r = s.binary_search_by_key(<span class="kw-2">&</span><span class="number">1</span>, |<span class="kw-2">&</span>(a, b)| b);
|
|||
|
<span class="macro">assert!</span>(<span class="kw">match </span>r { <span class="prelude-val">Ok</span>(<span class="number">1</span>..=<span class="number">4</span>) => <span class="bool-val">true</span>, <span class="kw">_ </span>=> <span class="bool-val">false</span>, });</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_unstable" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.20.0">1.20.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2936-2938">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_unstable" class="fn">sort_unstable</a>(&mut self)<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h4></section></summary><div class="docblock"><p>Sorts the slice <strong>without</strong> preserving the initial order of equal elements.</p>
|
|||
|
<p>This sort is unstable (i.e., may reorder equal elements), in-place (i.e., does not
|
|||
|
allocate), and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p>
|
|||
|
<p>If the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>T</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a> the resulting
|
|||
|
order of elements in the slice is unspecified. All original elements will remain in the
|
|||
|
slice and any possible modifications via interior mutability are observed in the input. Same
|
|||
|
is true if the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>T</code> panics.</p>
|
|||
|
<p>Sorting types that only implement <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd"><code>PartialOrd</code></a> such as <a href="https://doc.rust-lang.org/1.83.0/core/primitive.f32.html" title="primitive f32"><code>f32</code></a> and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.f64.html" title="primitive f64"><code>f64</code></a> require
|
|||
|
additional precautions. For example, <code>f32::NAN != f32::NAN</code>, which doesn’t fulfill the
|
|||
|
reflexivity requirement of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a>. By using an alternative comparison function with
|
|||
|
<code>slice::sort_unstable_by</code> such as <a href="https://doc.rust-lang.org/1.83.0/core/primitive.f32.html#method.total_cmp" title="method f32::total_cmp"><code>f32::total_cmp</code></a> or <a href="https://doc.rust-lang.org/1.83.0/core/primitive.f64.html#method.total_cmp" title="method f64::total_cmp"><code>f64::total_cmp</code></a> that defines a
|
|||
|
<a href="https://en.wikipedia.org/wiki/Total_order">total order</a> users can sort slices containing floating-point values. Alternatively, if all
|
|||
|
values in the slice are guaranteed to be in a subset for which <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#tymethod.partial_cmp" title="method core::cmp::PartialOrd::partial_cmp"><code>PartialOrd::partial_cmp</code></a>
|
|||
|
forms a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a>, it’s possible to sort the slice with <code>sort_unstable_by(|a, b| a.partial_cmp(b).unwrap())</code>.</p>
|
|||
|
<h5 id="current-implementation"><a class="doc-anchor" href="#current-implementation">§</a>Current implementation</h5>
|
|||
|
<p>The current implementation is based on <a href="https://github.com/Voultapher/sort-research-rs/tree/main/ipnsort">ipnsort</a> by Lukas Bergdoll and Orson Peters, which
|
|||
|
combines the fast average case of quicksort with the fast worst case of heapsort, achieving
|
|||
|
linear time on fully sorted and reversed inputs. On inputs with k distinct elements, the
|
|||
|
expected time to sort the data is <em>O</em>(<em>n</em> * log(<em>k</em>)).</p>
|
|||
|
<p>It is typically faster than stable sorting, except in a few special cases, e.g., when the
|
|||
|
slice is partially sorted.</p>
|
|||
|
<h5 id="panics-22"><a class="doc-anchor" href="#panics-22">§</a>Panics</h5>
|
|||
|
<p>May panic if the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>T</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a>.</p>
|
|||
|
<h5 id="examples-93"><a class="doc-anchor" href="#examples-93">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">4</span>, -<span class="number">5</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
v.sort_unstable();
|
|||
|
<span class="macro">assert_eq!</span>(v, [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_unstable_by" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.20.0">1.20.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#2988-2990">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_unstable_by" class="fn">sort_unstable_by</a><F>(&mut self, compare: F)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</div></h4></section></summary><div class="docblock"><p>Sorts the slice with a comparison function, <strong>without</strong> preserving the initial order of
|
|||
|
equal elements.</p>
|
|||
|
<p>This sort is unstable (i.e., may reorder equal elements), in-place (i.e., does not
|
|||
|
allocate), and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p>
|
|||
|
<p>If the comparison function <code>compare</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a> the resulting order
|
|||
|
of elements in the slice is unspecified. All original elements will remain in the slice and
|
|||
|
any possible modifications via interior mutability are observed in the input. Same is true
|
|||
|
if <code>compare</code> panics.</p>
|
|||
|
<p>For example <code>|a, b| (a - b).cmp(a)</code> is a comparison function that is neither transitive nor
|
|||
|
reflexive nor total, <code>a < b < c < a</code> with <code>a = 1, b = 2, c = 3</code>. For more information and
|
|||
|
examples see the <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> documentation.</p>
|
|||
|
<h5 id="current-implementation-1"><a class="doc-anchor" href="#current-implementation-1">§</a>Current implementation</h5>
|
|||
|
<p>The current implementation is based on <a href="https://github.com/Voultapher/sort-research-rs/tree/main/ipnsort">ipnsort</a> by Lukas Bergdoll and Orson Peters, which
|
|||
|
combines the fast average case of quicksort with the fast worst case of heapsort, achieving
|
|||
|
linear time on fully sorted and reversed inputs. On inputs with k distinct elements, the
|
|||
|
expected time to sort the data is <em>O</em>(<em>n</em> * log(<em>k</em>)).</p>
|
|||
|
<p>It is typically faster than stable sorting, except in a few special cases, e.g., when the
|
|||
|
slice is partially sorted.</p>
|
|||
|
<h5 id="panics-23"><a class="doc-anchor" href="#panics-23">§</a>Panics</h5>
|
|||
|
<p>May panic if <code>compare</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a>.</p>
|
|||
|
<h5 id="examples-94"><a class="doc-anchor" href="#examples-94">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">4</span>, -<span class="number">5</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>];
|
|||
|
v.sort_unstable_by(|a, b| a.cmp(b));
|
|||
|
<span class="macro">assert_eq!</span>(v, [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]);
|
|||
|
|
|||
|
<span class="comment">// reverse sorting
|
|||
|
</span>v.sort_unstable_by(|a, b| b.cmp(a));
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">4</span>, <span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_unstable_by_key" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.20.0">1.20.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3033-3036">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_unstable_by_key" class="fn">sort_unstable_by_key</a><K, F>(&mut self, f: F)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> K,
|
|||
|
K: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h4></section></summary><div class="docblock"><p>Sorts the slice with a key extraction function, <strong>without</strong> preserving the initial order of
|
|||
|
equal elements.</p>
|
|||
|
<p>This sort is unstable (i.e., may reorder equal elements), in-place (i.e., does not
|
|||
|
allocate), and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p>
|
|||
|
<p>If the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>K</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a> the resulting
|
|||
|
order of elements in the slice is unspecified. All original elements will remain in the
|
|||
|
slice and any possible modifications via interior mutability are observed in the input. Same
|
|||
|
is true if the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>K</code> panics.</p>
|
|||
|
<h5 id="current-implementation-2"><a class="doc-anchor" href="#current-implementation-2">§</a>Current implementation</h5>
|
|||
|
<p>The current implementation is based on <a href="https://github.com/Voultapher/sort-research-rs/tree/main/ipnsort">ipnsort</a> by Lukas Bergdoll and Orson Peters, which
|
|||
|
combines the fast average case of quicksort with the fast worst case of heapsort, achieving
|
|||
|
linear time on fully sorted and reversed inputs. On inputs with k distinct elements, the
|
|||
|
expected time to sort the data is <em>O</em>(<em>n</em> * log(<em>k</em>)).</p>
|
|||
|
<p>It is typically faster than stable sorting, except in a few special cases, e.g., when the
|
|||
|
slice is partially sorted.</p>
|
|||
|
<h5 id="panics-24"><a class="doc-anchor" href="#panics-24">§</a>Panics</h5>
|
|||
|
<p>May panic if the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>K</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a>.</p>
|
|||
|
<h5 id="examples-95"><a class="doc-anchor" href="#examples-95">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">4i32</span>, -<span class="number">5</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
v.sort_unstable_by_key(|k| k.abs());
|
|||
|
<span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.select_nth_unstable" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.49.0">1.49.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3095-3097">source</a></span><h4 class="code-header">pub fn <a href="#method.select_nth_unstable" class="fn">select_nth_unstable</a>(
|
|||
|
&mut self,
|
|||
|
index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>,
|
|||
|
) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h4></section></summary><div class="docblock"><p>Reorders the slice such that the element at <code>index</code> after the reordering is at its final
|
|||
|
sorted position.</p>
|
|||
|
<p>This reordering has the additional property that any value at position <code>i < index</code> will be
|
|||
|
less than or equal to any value at a position <code>j > index</code>. Additionally, this reordering is
|
|||
|
unstable (i.e. any number of equal elements may end up at position <code>index</code>), in-place (i.e.
|
|||
|
does not allocate), and runs in <em>O</em>(<em>n</em>) time. This function is also known as “kth element”
|
|||
|
in other libraries.</p>
|
|||
|
<p>It returns a triplet of the following from the reordered slice: the subslice prior to
|
|||
|
<code>index</code>, the element at <code>index</code>, and the subslice after <code>index</code>; accordingly, the values in
|
|||
|
those two subslices will respectively all be less-than-or-equal-to and
|
|||
|
greater-than-or-equal-to the value of the element at <code>index</code>.</p>
|
|||
|
<h5 id="current-implementation-3"><a class="doc-anchor" href="#current-implementation-3">§</a>Current implementation</h5>
|
|||
|
<p>The current algorithm is an introselect implementation based on <a href="https://github.com/Voultapher/sort-research-rs/tree/main/ipnsort">ipnsort</a> by Lukas Bergdoll
|
|||
|
and Orson Peters, which is also the basis for <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.sort_unstable" title="method slice::sort_unstable"><code>sort_unstable</code></a>. The fallback algorithm is
|
|||
|
Median of Medians using Tukey’s Ninther for pivot selection, which guarantees linear runtime
|
|||
|
for all inputs.</p>
|
|||
|
<h5 id="panics-25"><a class="doc-anchor" href="#panics-25">§</a>Panics</h5>
|
|||
|
<p>Panics when <code>index >= len()</code>, meaning it always panics on empty slices.</p>
|
|||
|
<p>May panic if the implementation of <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord"><code>Ord</code></a> for <code>T</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a>.</p>
|
|||
|
<h5 id="examples-96"><a class="doc-anchor" href="#examples-96">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">1</span>];
|
|||
|
|
|||
|
<span class="comment">// Find the items less than or equal to the median, the median, and greater than or equal to
|
|||
|
// the median.
|
|||
|
</span><span class="kw">let </span>(lesser, median, greater) = v.select_nth_unstable(<span class="number">2</span>);
|
|||
|
|
|||
|
<span class="macro">assert!</span>(lesser == [-<span class="number">3</span>, -<span class="number">5</span>] || lesser == [-<span class="number">5</span>, -<span class="number">3</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(median, <span class="kw-2">&mut </span><span class="number">1</span>);
|
|||
|
<span class="macro">assert!</span>(greater == [<span class="number">4</span>, <span class="number">2</span>] || greater == [<span class="number">2</span>, <span class="number">4</span>]);
|
|||
|
|
|||
|
<span class="comment">// We are only guaranteed the slice will be one of the following, based on the way we sort
|
|||
|
// about the specified index.
|
|||
|
</span><span class="macro">assert!</span>(v == [-<span class="number">3</span>, -<span class="number">5</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>] ||
|
|||
|
v == [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>] ||
|
|||
|
v == [-<span class="number">3</span>, -<span class="number">5</span>, <span class="number">1</span>, <span class="number">4</span>, <span class="number">2</span>] ||
|
|||
|
v == [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">4</span>, <span class="number">2</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.select_nth_unstable_by" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.49.0">1.49.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3156-3162">source</a></span><h4 class="code-header">pub fn <a href="#method.select_nth_unstable_by" class="fn">select_nth_unstable_by</a><F>(
|
|||
|
&mut self,
|
|||
|
index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>,
|
|||
|
compare: F,
|
|||
|
) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</div></h4></section></summary><div class="docblock"><p>Reorders the slice with a comparator function such that the element at <code>index</code> after the
|
|||
|
reordering is at its final sorted position.</p>
|
|||
|
<p>This reordering has the additional property that any value at position <code>i < index</code> will be
|
|||
|
less than or equal to any value at a position <code>j > index</code> using the comparator function.
|
|||
|
Additionally, this reordering is unstable (i.e. any number of equal elements may end up at
|
|||
|
position <code>index</code>), in-place (i.e. does not allocate), and runs in <em>O</em>(<em>n</em>) time. This
|
|||
|
function is also known as “kth element” in other libraries.</p>
|
|||
|
<p>It returns a triplet of the following from the slice reordered according to the provided
|
|||
|
comparator function: the subslice prior to <code>index</code>, the element at <code>index</code>, and the subslice
|
|||
|
after <code>index</code>; accordingly, the values in those two subslices will respectively all be
|
|||
|
less-than-or-equal-to and greater-than-or-equal-to the value of the element at <code>index</code>.</p>
|
|||
|
<h5 id="current-implementation-4"><a class="doc-anchor" href="#current-implementation-4">§</a>Current implementation</h5>
|
|||
|
<p>The current algorithm is an introselect implementation based on <a href="https://github.com/Voultapher/sort-research-rs/tree/main/ipnsort">ipnsort</a> by Lukas Bergdoll
|
|||
|
and Orson Peters, which is also the basis for <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.sort_unstable" title="method slice::sort_unstable"><code>sort_unstable</code></a>. The fallback algorithm is
|
|||
|
Median of Medians using Tukey’s Ninther for pivot selection, which guarantees linear runtime
|
|||
|
for all inputs.</p>
|
|||
|
<h5 id="panics-26"><a class="doc-anchor" href="#panics-26">§</a>Panics</h5>
|
|||
|
<p>Panics when <code>index >= len()</code>, meaning it always panics on empty slices.</p>
|
|||
|
<p>May panic if <code>compare</code> does not implement a <a href="https://en.wikipedia.org/wiki/Total_order">total order</a>.</p>
|
|||
|
<h5 id="examples-97"><a class="doc-anchor" href="#examples-97">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">1</span>];
|
|||
|
|
|||
|
<span class="comment">// Find the items less than or equal to the median, the median, and greater than or equal to
|
|||
|
// the median as if the slice were sorted in descending order.
|
|||
|
</span><span class="kw">let </span>(lesser, median, greater) = v.select_nth_unstable_by(<span class="number">2</span>, |a, b| b.cmp(a));
|
|||
|
|
|||
|
<span class="macro">assert!</span>(lesser == [<span class="number">4</span>, <span class="number">2</span>] || lesser == [<span class="number">2</span>, <span class="number">4</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(median, <span class="kw-2">&mut </span><span class="number">1</span>);
|
|||
|
<span class="macro">assert!</span>(greater == [-<span class="number">3</span>, -<span class="number">5</span>] || greater == [-<span class="number">5</span>, -<span class="number">3</span>]);
|
|||
|
|
|||
|
<span class="comment">// We are only guaranteed the slice will be one of the following, based on the way we sort
|
|||
|
// about the specified index.
|
|||
|
</span><span class="macro">assert!</span>(v == [<span class="number">2</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">5</span>, -<span class="number">3</span>] ||
|
|||
|
v == [<span class="number">2</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>] ||
|
|||
|
v == [<span class="number">4</span>, <span class="number">2</span>, <span class="number">1</span>, -<span class="number">5</span>, -<span class="number">3</span>] ||
|
|||
|
v == [<span class="number">4</span>, <span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.select_nth_unstable_by_key" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.49.0">1.49.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3221-3228">source</a></span><h4 class="code-header">pub fn <a href="#method.select_nth_unstable_by_key" class="fn">select_nth_unstable_by_key</a><K, F>(
|
|||
|
&mut self,
|
|||
|
index: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>,
|
|||
|
f: F,
|
|||
|
) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> K,
|
|||
|
K: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h4></section></summary><div class="docblock"><p>Reorders the slice with a key extraction function such that the element at <code>index</code> after the
|
|||
|
reordering is at its final sorted position.</p>
|
|||
|
<p>This reordering has the additional property that any value at position <code>i < index</code> will be
|
|||
|
less than or equal to any value at a position <code>j > index</code> using the key extraction function.
|
|||
|
Additionally, this reordering is unstable (i.e. any number of equal elements may end up at
|
|||
|
position <code>index</code>), in-place (i.e. does not allocate), and runs in <em>O</em>(<em>n</em>) time. This
|
|||
|
function is also known as “kth element” in other libraries.</p>
|
|||
|
<p>It returns a triplet of the following from the slice reordered according to the provided key
|
|||
|
extraction function: the subslice prior to <code>index</code>, the element at <code>index</code>, and the subslice
|
|||
|
after <code>index</code>; accordingly, the values in those two subslices will respectively all be
|
|||
|
less-than-or-equal-to and greater-than-or-equal-to the value of the element at <code>index</code>.</p>
|
|||
|
<h5 id="current-implementation-5"><a class="doc-anchor" href="#current-implementation-5">§</a>Current implementation</h5>
|
|||
|
<p>The current algorithm is an introselect implementation based on <a href="https://github.com/Voultapher/sort-research-rs/tree/main/ipnsort">ipnsort</a> by Lukas Bergdoll
|
|||
|
and Orson Peters, which is also the basis for <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.sort_unstable" title="method slice::sort_unstable"><code>sort_unstable</code></a>. The fallback algorithm is
|
|||
|
Median of Medians using Tukey’s Ninther for pivot selection, which guarantees linear runtime
|
|||
|
for all inputs.</p>
|
|||
|
<h5 id="panics-27"><a class="doc-anchor" href="#panics-27">§</a>Panics</h5>
|
|||
|
<p>Panics when <code>index >= len()</code>, meaning it always panics on empty slices.</p>
|
|||
|
<p>May panic if <code>K: Ord</code> does not implement a total order.</p>
|
|||
|
<h5 id="examples-98"><a class="doc-anchor" href="#examples-98">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>];
|
|||
|
|
|||
|
<span class="comment">// Find the items less than or equal to the median, the median, and greater than or equal to
|
|||
|
// the median as if the slice were sorted according to absolute value.
|
|||
|
</span><span class="kw">let </span>(lesser, median, greater) = v.select_nth_unstable_by_key(<span class="number">2</span>, |a| a.abs());
|
|||
|
|
|||
|
<span class="macro">assert!</span>(lesser == [<span class="number">1</span>, <span class="number">2</span>] || lesser == [<span class="number">2</span>, <span class="number">1</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(median, <span class="kw-2">&mut </span>-<span class="number">3</span>);
|
|||
|
<span class="macro">assert!</span>(greater == [<span class="number">4</span>, -<span class="number">5</span>] || greater == [-<span class="number">5</span>, <span class="number">4</span>]);
|
|||
|
|
|||
|
<span class="comment">// We are only guaranteed the slice will be one of the following, based on the way we sort
|
|||
|
// about the specified index.
|
|||
|
</span><span class="macro">assert!</span>(v == [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>] ||
|
|||
|
v == [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, -<span class="number">5</span>, <span class="number">4</span>] ||
|
|||
|
v == [<span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>] ||
|
|||
|
v == [<span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.partition_dedup" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3255-3257">source</a><h4 class="code-header">pub fn <a href="#method.partition_dedup" class="fn">partition_dedup</a>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_partition_dedup</code>)</span></div></span></summary><div class="docblock"><p>Moves all consecutive repeated elements to the end of the slice according to the
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq"><code>PartialEq</code></a> trait implementation.</p>
|
|||
|
<p>Returns two slices. The first contains no consecutive repeated elements.
|
|||
|
The second contains all the duplicates in no specified order.</p>
|
|||
|
<p>If the slice is sorted, the first returned slice contains no duplicates.</p>
|
|||
|
<h5 id="examples-99"><a class="doc-anchor" href="#examples-99">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_partition_dedup)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">1</span>];
|
|||
|
|
|||
|
<span class="kw">let </span>(dedup, duplicates) = slice.partition_dedup();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(dedup, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(duplicates, [<span class="number">2</span>, <span class="number">3</span>, <span class="number">1</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.partition_dedup_by" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3289-3291">source</a><h4 class="code-header">pub fn <a href="#method.partition_dedup_by" class="fn">partition_dedup_by</a><F>(&mut self, same_bucket: F) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_partition_dedup</code>)</span></div></span></summary><div class="docblock"><p>Moves all but the first of consecutive elements to the end of the slice satisfying
|
|||
|
a given equality relation.</p>
|
|||
|
<p>Returns two slices. The first contains no consecutive repeated elements.
|
|||
|
The second contains all the duplicates in no specified order.</p>
|
|||
|
<p>The <code>same_bucket</code> function is passed references to two elements from the slice and
|
|||
|
must determine if the elements compare equal. The elements are passed in opposite order
|
|||
|
from their order in the slice, so if <code>same_bucket(a, b)</code> returns <code>true</code>, <code>a</code> is moved
|
|||
|
at the end of the slice.</p>
|
|||
|
<p>If the slice is sorted, the first returned slice contains no duplicates.</p>
|
|||
|
<h5 id="examples-100"><a class="doc-anchor" href="#examples-100">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_partition_dedup)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="string">"foo"</span>, <span class="string">"Foo"</span>, <span class="string">"BAZ"</span>, <span class="string">"Bar"</span>, <span class="string">"bar"</span>, <span class="string">"baz"</span>, <span class="string">"BAZ"</span>];
|
|||
|
|
|||
|
<span class="kw">let </span>(dedup, duplicates) = slice.partition_dedup_by(|a, b| a.eq_ignore_ascii_case(b));
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(dedup, [<span class="string">"foo"</span>, <span class="string">"BAZ"</span>, <span class="string">"Bar"</span>, <span class="string">"baz"</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(duplicates, [<span class="string">"bar"</span>, <span class="string">"Foo"</span>, <span class="string">"BAZ"</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.partition_dedup_by_key" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3415-3418">source</a><h4 class="code-header">pub fn <a href="#method.partition_dedup_by_key" class="fn">partition_dedup_by_key</a><K, F>(&mut self, key: F) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>) -> K,
|
|||
|
K: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_partition_dedup</code>)</span></div></span></summary><div class="docblock"><p>Moves all but the first of consecutive elements to the end of the slice that resolve
|
|||
|
to the same key.</p>
|
|||
|
<p>Returns two slices. The first contains no consecutive repeated elements.
|
|||
|
The second contains all the duplicates in no specified order.</p>
|
|||
|
<p>If the slice is sorted, the first returned slice contains no duplicates.</p>
|
|||
|
<h5 id="examples-101"><a class="doc-anchor" href="#examples-101">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_partition_dedup)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">10</span>, <span class="number">20</span>, <span class="number">21</span>, <span class="number">30</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">11</span>, <span class="number">13</span>];
|
|||
|
|
|||
|
<span class="kw">let </span>(dedup, duplicates) = slice.partition_dedup_by_key(|i| <span class="kw-2">*</span>i / <span class="number">10</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(dedup, [<span class="number">10</span>, <span class="number">20</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">11</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(duplicates, [<span class="number">21</span>, <span class="number">30</span>, <span class="number">13</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rotate_left" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.26.0">1.26.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3456">source</a></span><h4 class="code-header">pub fn <a href="#method.rotate_left" class="fn">rotate_left</a>(&mut self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Rotates the slice in-place such that the first <code>mid</code> elements of the
|
|||
|
slice move to the end while the last <code>self.len() - mid</code> elements move to
|
|||
|
the front.</p>
|
|||
|
<p>After calling <code>rotate_left</code>, the element previously at index <code>mid</code> will
|
|||
|
become the first element in the slice.</p>
|
|||
|
<h5 id="panics-28"><a class="doc-anchor" href="#panics-28">§</a>Panics</h5>
|
|||
|
<p>This function will panic if <code>mid</code> is greater than the length of the
|
|||
|
slice. Note that <code>mid == self.len()</code> does <em>not</em> panic and is a no-op
|
|||
|
rotation.</p>
|
|||
|
<h5 id="complexity"><a class="doc-anchor" href="#complexity">§</a>Complexity</h5>
|
|||
|
<p>Takes linear (in <code>self.len()</code>) time.</p>
|
|||
|
<h5 id="examples-102"><a class="doc-anchor" href="#examples-102">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>];
|
|||
|
a.rotate_left(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(a, [<span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>, <span class="string">'a'</span>, <span class="string">'b'</span>]);</code></pre></div>
|
|||
|
<p>Rotating a subslice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>];
|
|||
|
a[<span class="number">1</span>..<span class="number">5</span>].rotate_left(<span class="number">1</span>);
|
|||
|
<span class="macro">assert_eq!</span>(a, [<span class="string">'a'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'b'</span>, <span class="string">'f'</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.rotate_right" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.26.0">1.26.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3501">source</a></span><h4 class="code-header">pub fn <a href="#method.rotate_right" class="fn">rotate_right</a>(&mut self, k: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Rotates the slice in-place such that the first <code>self.len() - k</code>
|
|||
|
elements of the slice move to the end while the last <code>k</code> elements move
|
|||
|
to the front.</p>
|
|||
|
<p>After calling <code>rotate_right</code>, the element previously at index
|
|||
|
<code>self.len() - k</code> will become the first element in the slice.</p>
|
|||
|
<h5 id="panics-29"><a class="doc-anchor" href="#panics-29">§</a>Panics</h5>
|
|||
|
<p>This function will panic if <code>k</code> is greater than the length of the
|
|||
|
slice. Note that <code>k == self.len()</code> does <em>not</em> panic and is a no-op
|
|||
|
rotation.</p>
|
|||
|
<h5 id="complexity-1"><a class="doc-anchor" href="#complexity-1">§</a>Complexity</h5>
|
|||
|
<p>Takes linear (in <code>self.len()</code>) time.</p>
|
|||
|
<h5 id="examples-103"><a class="doc-anchor" href="#examples-103">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>];
|
|||
|
a.rotate_right(<span class="number">2</span>);
|
|||
|
<span class="macro">assert_eq!</span>(a, [<span class="string">'e'</span>, <span class="string">'f'</span>, <span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]);</code></pre></div>
|
|||
|
<p>Rotating a subslice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>];
|
|||
|
a[<span class="number">1</span>..<span class="number">5</span>].rotate_right(<span class="number">1</span>);
|
|||
|
<span class="macro">assert_eq!</span>(a, [<span class="string">'a'</span>, <span class="string">'e'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'f'</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.fill" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.50.0">1.50.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3524-3526">source</a></span><h4 class="code-header">pub fn <a href="#method.fill" class="fn">fill</a>(&mut self, value: T)<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h4></section></summary><div class="docblock"><p>Fills <code>self</code> with elements by cloning <code>value</code>.</p>
|
|||
|
<h5 id="examples-104"><a class="doc-anchor" href="#examples-104">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">10</span>];
|
|||
|
buf.fill(<span class="number">1</span>);
|
|||
|
<span class="macro">assert_eq!</span>(buf, <span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">10</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.fill_with" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3548-3550">source</a></span><h4 class="code-header">pub fn <a href="#method.fill_with" class="fn">fill_with</a><F>(&mut self, f: F)<div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>() -> T,</div></h4></section></summary><div class="docblock"><p>Fills <code>self</code> with elements returned by calling a closure repeatedly.</p>
|
|||
|
<p>This method uses a closure to create new values. If you’d rather
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone"><code>Clone</code></a> a given value, use <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.fill" title="method slice::fill"><code>fill</code></a>. If you want to use the <a href="https://doc.rust-lang.org/1.83.0/core/default/trait.Default.html" title="trait core::default::Default"><code>Default</code></a>
|
|||
|
trait to generate values, you can pass <a href="https://doc.rust-lang.org/1.83.0/core/default/trait.Default.html#tymethod.default" title="associated function core::default::Default::default"><code>Default::default</code></a> as the
|
|||
|
argument.</p>
|
|||
|
<h5 id="examples-105"><a class="doc-anchor" href="#examples-105">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">10</span>];
|
|||
|
buf.fill_with(Default::default);
|
|||
|
<span class="macro">assert_eq!</span>(buf, <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">10</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.clone_from_slice" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.7.0">1.7.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3611-3613">source</a></span><h4 class="code-header">pub fn <a href="#method.clone_from_slice" class="fn">clone_from_slice</a>(&mut self, src: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h4></section></summary><div class="docblock"><p>Copies the elements from <code>src</code> into <code>self</code>.</p>
|
|||
|
<p>The length of <code>src</code> must be the same as <code>self</code>.</p>
|
|||
|
<h5 id="panics-30"><a class="doc-anchor" href="#panics-30">§</a>Panics</h5>
|
|||
|
<p>This function will panic if the two slices have different lengths.</p>
|
|||
|
<h5 id="examples-106"><a class="doc-anchor" href="#examples-106">§</a>Examples</h5>
|
|||
|
<p>Cloning two elements from a slice into another:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>src = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>dst = [<span class="number">0</span>, <span class="number">0</span>];
|
|||
|
|
|||
|
<span class="comment">// Because the slices have to be the same length,
|
|||
|
// we slice the source slice from four elements
|
|||
|
// to two. It will panic if we don't do this.
|
|||
|
</span>dst.clone_from_slice(<span class="kw-2">&</span>src[<span class="number">2</span>..]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(src, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(dst, [<span class="number">3</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
<p>Rust enforces that there can only be one mutable reference with no
|
|||
|
immutable references to a particular piece of data in a particular
|
|||
|
scope. Because of this, attempting to use <code>clone_from_slice</code> on a
|
|||
|
single slice will result in a compile failure:</p>
|
|||
|
|
|||
|
<div class="example-wrap compile_fail"><a href="#" class="tooltip" title="This example deliberately fails to compile">ⓘ</a><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];
|
|||
|
|
|||
|
slice[..<span class="number">2</span>].clone_from_slice(<span class="kw-2">&</span>slice[<span class="number">3</span>..]); <span class="comment">// compile fail!</span></code></pre></div>
|
|||
|
<p>To work around this, we can use <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at_mut" title="method slice::split_at_mut"><code>split_at_mut</code></a> to create two distinct
|
|||
|
sub-slices from a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = slice.split_at_mut(<span class="number">2</span>);
|
|||
|
left.clone_from_slice(<span class="kw-2">&</span>right[<span class="number">1</span>..]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, [<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.copy_from_slice" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.9.0">1.9.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3675-3677">source</a></span><h4 class="code-header">pub fn <a href="#method.copy_from_slice" class="fn">copy_from_slice</a>(&mut self, src: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a>,</div></h4></section></summary><div class="docblock"><p>Copies all elements from <code>src</code> into <code>self</code>, using a memcpy.</p>
|
|||
|
<p>The length of <code>src</code> must be the same as <code>self</code>.</p>
|
|||
|
<p>If <code>T</code> does not implement <code>Copy</code>, use <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.clone_from_slice" title="method slice::clone_from_slice"><code>clone_from_slice</code></a>.</p>
|
|||
|
<h5 id="panics-31"><a class="doc-anchor" href="#panics-31">§</a>Panics</h5>
|
|||
|
<p>This function will panic if the two slices have different lengths.</p>
|
|||
|
<h5 id="examples-107"><a class="doc-anchor" href="#examples-107">§</a>Examples</h5>
|
|||
|
<p>Copying two elements from a slice into another:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>src = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>dst = [<span class="number">0</span>, <span class="number">0</span>];
|
|||
|
|
|||
|
<span class="comment">// Because the slices have to be the same length,
|
|||
|
// we slice the source slice from four elements
|
|||
|
// to two. It will panic if we don't do this.
|
|||
|
</span>dst.copy_from_slice(<span class="kw-2">&</span>src[<span class="number">2</span>..]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(src, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(dst, [<span class="number">3</span>, <span class="number">4</span>]);</code></pre></div>
|
|||
|
<p>Rust enforces that there can only be one mutable reference with no
|
|||
|
immutable references to a particular piece of data in a particular
|
|||
|
scope. Because of this, attempting to use <code>copy_from_slice</code> on a
|
|||
|
single slice will result in a compile failure:</p>
|
|||
|
|
|||
|
<div class="example-wrap compile_fail"><a href="#" class="tooltip" title="This example deliberately fails to compile">ⓘ</a><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];
|
|||
|
|
|||
|
slice[..<span class="number">2</span>].copy_from_slice(<span class="kw-2">&</span>slice[<span class="number">3</span>..]); <span class="comment">// compile fail!</span></code></pre></div>
|
|||
|
<p>To work around this, we can use <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at_mut" title="method slice::split_at_mut"><code>split_at_mut</code></a> to create two distinct
|
|||
|
sub-slices from a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = slice.split_at_mut(<span class="number">2</span>);
|
|||
|
left.copy_from_slice(<span class="kw-2">&</span>right[<span class="number">1</span>..]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, [<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.copy_within" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.37.0">1.37.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3729-3731">source</a></span><h4 class="code-header">pub fn <a href="#method.copy_within" class="fn">copy_within</a><R>(&mut self, src: R, dest: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)<div class="where">where
|
|||
|
R: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>,
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a>,</div></h4></section></summary><div class="docblock"><p>Copies elements from one part of the slice to another part of itself,
|
|||
|
using a memmove.</p>
|
|||
|
<p><code>src</code> is the range within <code>self</code> to copy from. <code>dest</code> is the starting
|
|||
|
index of the range within <code>self</code> to copy to, which will have the same
|
|||
|
length as <code>src</code>. The two ranges may overlap. The ends of the two ranges
|
|||
|
must be less than or equal to <code>self.len()</code>.</p>
|
|||
|
<h5 id="panics-32"><a class="doc-anchor" href="#panics-32">§</a>Panics</h5>
|
|||
|
<p>This function will panic if either range exceeds the end of the slice,
|
|||
|
or if the end of <code>src</code> is before the start.</p>
|
|||
|
<h5 id="examples-108"><a class="doc-anchor" href="#examples-108">§</a>Examples</h5>
|
|||
|
<p>Copying four bytes within a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>bytes = <span class="kw-2">*</span><span class="string">b"Hello, World!"</span>;
|
|||
|
|
|||
|
bytes.copy_within(<span class="number">1</span>..<span class="number">5</span>, <span class="number">8</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&</span>bytes, <span class="string">b"Hello, Wello!"</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.swap_with_slice" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.27.0">1.27.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3796">source</a></span><h4 class="code-header">pub fn <a href="#method.swap_with_slice" class="fn">swap_with_slice</a>(&mut self, other: &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Swaps all elements in <code>self</code> with those in <code>other</code>.</p>
|
|||
|
<p>The length of <code>other</code> must be the same as <code>self</code>.</p>
|
|||
|
<h5 id="panics-33"><a class="doc-anchor" href="#panics-33">§</a>Panics</h5>
|
|||
|
<p>This function will panic if the two slices have different lengths.</p>
|
|||
|
<h5 id="example"><a class="doc-anchor" href="#example">§</a>Example</h5>
|
|||
|
<p>Swapping two elements across slices:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice1 = [<span class="number">0</span>, <span class="number">0</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>slice2 = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>];
|
|||
|
|
|||
|
slice1.swap_with_slice(<span class="kw-2">&mut </span>slice2[<span class="number">2</span>..]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice1, [<span class="number">3</span>, <span class="number">4</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(slice2, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">0</span>, <span class="number">0</span>]);</code></pre></div>
|
|||
|
<p>Rust enforces that there can only be one mutable reference to a
|
|||
|
particular piece of data in a particular scope. Because of this,
|
|||
|
attempting to use <code>swap_with_slice</code> on a single slice will result in
|
|||
|
a compile failure:</p>
|
|||
|
|
|||
|
<div class="example-wrap compile_fail"><a href="#" class="tooltip" title="This example deliberately fails to compile">ⓘ</a><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];
|
|||
|
slice[..<span class="number">2</span>].swap_with_slice(<span class="kw-2">&mut </span>slice[<span class="number">3</span>..]); <span class="comment">// compile fail!</span></code></pre></div>
|
|||
|
<p>To work around this, we can use <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split_at_mut" title="method slice::split_at_mut"><code>split_at_mut</code></a> to create two distinct
|
|||
|
mutable sub-slices from a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>];
|
|||
|
|
|||
|
{
|
|||
|
<span class="kw">let </span>(left, right) = slice.split_at_mut(<span class="number">2</span>);
|
|||
|
left.swap_with_slice(<span class="kw-2">&mut </span>right[<span class="number">1</span>..]);
|
|||
|
}
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, [<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.align_to" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.30.0">1.30.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3873">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.align_to" class="fn">align_to</a><U>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[U]</a>, &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Transmutes the slice to a slice of another type, ensuring alignment of the types is
|
|||
|
maintained.</p>
|
|||
|
<p>This method splits the slice into three distinct slices: prefix, correctly aligned middle
|
|||
|
slice of a new type, and the suffix slice. The middle part will be as big as possible under
|
|||
|
the given alignment constraint and element size.</p>
|
|||
|
<p>This method has no purpose when either input element <code>T</code> or output element <code>U</code> are
|
|||
|
zero-sized and will return the original slice without splitting anything.</p>
|
|||
|
<h5 id="safety-12"><a class="doc-anchor" href="#safety-12">§</a>Safety</h5>
|
|||
|
<p>This method is essentially a <code>transmute</code> with respect to the elements in the returned
|
|||
|
middle slice, so all the usual caveats pertaining to <code>transmute::<T, U></code> also apply here.</p>
|
|||
|
<h5 id="examples-109"><a class="doc-anchor" href="#examples-109">§</a>Examples</h5>
|
|||
|
<p>Basic usage:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>bytes: [u8; <span class="number">7</span>] = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>];
|
|||
|
<span class="kw">let </span>(prefix, shorts, suffix) = bytes.align_to::<u16>();
|
|||
|
<span class="comment">// less_efficient_algorithm_for_bytes(prefix);
|
|||
|
// more_efficient_algorithm_for_aligned_shorts(shorts);
|
|||
|
// less_efficient_algorithm_for_bytes(suffix);
|
|||
|
</span>}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.align_to_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.30.0">1.30.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#3938">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.align_to_mut" class="fn">align_to_mut</a><U>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[U]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Transmutes the mutable slice to a mutable slice of another type, ensuring alignment of the
|
|||
|
types is maintained.</p>
|
|||
|
<p>This method splits the slice into three distinct slices: prefix, correctly aligned middle
|
|||
|
slice of a new type, and the suffix slice. The middle part will be as big as possible under
|
|||
|
the given alignment constraint and element size.</p>
|
|||
|
<p>This method has no purpose when either input element <code>T</code> or output element <code>U</code> are
|
|||
|
zero-sized and will return the original slice without splitting anything.</p>
|
|||
|
<h5 id="safety-13"><a class="doc-anchor" href="#safety-13">§</a>Safety</h5>
|
|||
|
<p>This method is essentially a <code>transmute</code> with respect to the elements in the returned
|
|||
|
middle slice, so all the usual caveats pertaining to <code>transmute::<T, U></code> also apply here.</p>
|
|||
|
<h5 id="examples-110"><a class="doc-anchor" href="#examples-110">§</a>Examples</h5>
|
|||
|
<p>Basic usage:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>bytes: [u8; <span class="number">7</span>] = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>];
|
|||
|
<span class="kw">let </span>(prefix, shorts, suffix) = bytes.align_to_mut::<u16>();
|
|||
|
<span class="comment">// less_efficient_algorithm_for_bytes(prefix);
|
|||
|
// more_efficient_algorithm_for_aligned_shorts(shorts);
|
|||
|
// less_efficient_algorithm_for_bytes(suffix);
|
|||
|
</span>}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_simd" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4029-4033">source</a><h4 class="code-header">pub fn <a href="#method.as_simd" class="fn">as_simd</a><const LANES: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &[<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>], &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; LANES]</a>>,
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/core_simd/vector/trait.SimdElement.html" title="trait core::core_simd::vector::SimdElement">SimdElement</a>,
|
|||
|
<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/core_simd/lane_count/struct.LaneCount.html" title="struct core::core_simd::lane_count::LaneCount">LaneCount</a><LANES>: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/core_simd/lane_count/trait.SupportedLaneCount.html" title="trait core::core_simd::lane_count::SupportedLaneCount">SupportedLaneCount</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>portable_simd</code>)</span></div></span></summary><div class="docblock"><p>Splits a slice into a prefix, a middle of aligned SIMD types, and a suffix.</p>
|
|||
|
<p>This is a safe wrapper around <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.align_to" title="method slice::align_to"><code>slice::align_to</code></a>, so inherits the same
|
|||
|
guarantees as that method.</p>
|
|||
|
<h5 id="panics-34"><a class="doc-anchor" href="#panics-34">§</a>Panics</h5>
|
|||
|
<p>This will panic if the size of the SIMD type is different from
|
|||
|
<code>LANES</code> times that of the scalar.</p>
|
|||
|
<p>At the time of writing, the trait restrictions on <code>Simd<T, LANES></code> keeps
|
|||
|
that from ever happening, as only power-of-two numbers of lanes are
|
|||
|
supported. It’s possible that, in the future, those restrictions might
|
|||
|
be lifted in a way that would make it possible to see panics from this
|
|||
|
method for something like <code>LANES == 3</code>.</p>
|
|||
|
<h5 id="examples-111"><a class="doc-anchor" href="#examples-111">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(portable_simd)]
|
|||
|
</span><span class="kw">use </span>core::simd::prelude::<span class="kw-2">*</span>;
|
|||
|
|
|||
|
<span class="kw">let </span>short = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
<span class="kw">let </span>(prefix, middle, suffix) = short.as_simd::<<span class="number">4</span>>();
|
|||
|
<span class="macro">assert_eq!</span>(middle, []); <span class="comment">// Not enough elements for anything in the middle
|
|||
|
|
|||
|
// They might be split in any possible way between prefix and suffix
|
|||
|
</span><span class="kw">let </span>it = prefix.iter().chain(suffix).copied();
|
|||
|
<span class="macro">assert_eq!</span>(it.collect::<Vec<<span class="kw">_</span>>>(), <span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]);
|
|||
|
|
|||
|
<span class="kw">fn </span>basic_simd_sum(x: <span class="kw-2">&</span>[f32]) -> f32 {
|
|||
|
<span class="kw">use </span>std::ops::Add;
|
|||
|
<span class="kw">let </span>(prefix, middle, suffix) = x.as_simd();
|
|||
|
<span class="kw">let </span>sums = f32x4::from_array([
|
|||
|
prefix.iter().copied().sum(),
|
|||
|
<span class="number">0.0</span>,
|
|||
|
<span class="number">0.0</span>,
|
|||
|
suffix.iter().copied().sum(),
|
|||
|
]);
|
|||
|
<span class="kw">let </span>sums = middle.iter().copied().fold(sums, f32x4::add);
|
|||
|
sums.reduce_sum()
|
|||
|
}
|
|||
|
|
|||
|
<span class="kw">let </span>numbers: Vec<f32> = (<span class="number">1</span>..<span class="number">101</span>).map(|x| x <span class="kw">as _</span>).collect();
|
|||
|
<span class="macro">assert_eq!</span>(basic_simd_sum(<span class="kw-2">&</span>numbers[<span class="number">1</span>..<span class="number">99</span>]), <span class="number">4949.0</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_simd_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4065-4069">source</a><h4 class="code-header">pub fn <a href="#method.as_simd_mut" class="fn">as_simd_mut</a><const LANES: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(
|
|||
|
&mut self,
|
|||
|
) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, &mut [<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>], &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>)<div class="where">where
|
|||
|
<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[T; LANES]</a>>,
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/core_simd/vector/trait.SimdElement.html" title="trait core::core_simd::vector::SimdElement">SimdElement</a>,
|
|||
|
<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/core_simd/lane_count/struct.LaneCount.html" title="struct core::core_simd::lane_count::LaneCount">LaneCount</a><LANES>: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/core_simd/lane_count/trait.SupportedLaneCount.html" title="trait core::core_simd::lane_count::SupportedLaneCount">SupportedLaneCount</a>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>portable_simd</code>)</span></div></span></summary><div class="docblock"><p>Splits a mutable slice into a mutable prefix, a middle of aligned SIMD types,
|
|||
|
and a mutable suffix.</p>
|
|||
|
<p>This is a safe wrapper around <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.align_to_mut" title="method slice::align_to_mut"><code>slice::align_to_mut</code></a>, so inherits the same
|
|||
|
guarantees as that method.</p>
|
|||
|
<p>This is the mutable version of <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.as_simd" title="method slice::as_simd"><code>slice::as_simd</code></a>; see that for examples.</p>
|
|||
|
<h5 id="panics-35"><a class="doc-anchor" href="#panics-35">§</a>Panics</h5>
|
|||
|
<p>This will panic if the size of the SIMD type is different from
|
|||
|
<code>LANES</code> times that of the scalar.</p>
|
|||
|
<p>At the time of writing, the trait restrictions on <code>Simd<T, LANES></code> keeps
|
|||
|
that from ever happening, as only power-of-two numbers of lanes are
|
|||
|
supported. It’s possible that, in the future, those restrictions might
|
|||
|
be lifted in a way that would make it possible to see panics from this
|
|||
|
method for something like <code>LANES == 3</code>.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_sorted" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.82.0">1.82.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4104-4106">source</a></span><h4 class="code-header">pub fn <a href="#method.is_sorted" class="fn">is_sorted</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a>,</div></h4></section></summary><div class="docblock"><p>Checks if the elements of this slice are sorted.</p>
|
|||
|
<p>That is, for each element <code>a</code> and its following element <code>b</code>, <code>a <= b</code> must hold. If the
|
|||
|
slice yields exactly zero or one element, <code>true</code> is returned.</p>
|
|||
|
<p>Note that if <code>Self::Item</code> is only <code>PartialOrd</code>, but not <code>Ord</code>, the above definition
|
|||
|
implies that this function returns <code>false</code> if any two consecutive items are not
|
|||
|
comparable.</p>
|
|||
|
<h5 id="examples-112"><a class="doc-anchor" href="#examples-112">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>empty: [i32; <span class="number">0</span>] = [];
|
|||
|
|
|||
|
<span class="macro">assert!</span>([<span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">9</span>].is_sorted());
|
|||
|
<span class="macro">assert!</span>(![<span class="number">1</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">4</span>].is_sorted());
|
|||
|
<span class="macro">assert!</span>([<span class="number">0</span>].is_sorted());
|
|||
|
<span class="macro">assert!</span>(empty.is_sorted());
|
|||
|
<span class="macro">assert!</span>(![<span class="number">0.0</span>, <span class="number">1.0</span>, f32::NAN].is_sorted());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_sorted_by" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.82.0">1.82.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4131-4133">source</a></span><h4 class="code-header">pub fn <a href="#method.is_sorted_by" class="fn">is_sorted_by</a><'a, F>(&'a self, compare: F) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>, <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Checks if the elements of this slice are sorted using the given comparator function.</p>
|
|||
|
<p>Instead of using <code>PartialOrd::partial_cmp</code>, this function uses the given <code>compare</code>
|
|||
|
function to determine whether two elements are to be considered in sorted order.</p>
|
|||
|
<h5 id="examples-113"><a class="doc-anchor" href="#examples-113">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert!</span>([<span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">9</span>].is_sorted_by(|a, b| a <= b));
|
|||
|
<span class="macro">assert!</span>(![<span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">9</span>].is_sorted_by(|a, b| a < b));
|
|||
|
|
|||
|
<span class="macro">assert!</span>([<span class="number">0</span>].is_sorted_by(|a, b| <span class="bool-val">true</span>));
|
|||
|
<span class="macro">assert!</span>([<span class="number">0</span>].is_sorted_by(|a, b| <span class="bool-val">false</span>));
|
|||
|
|
|||
|
<span class="kw">let </span>empty: [i32; <span class="number">0</span>] = [];
|
|||
|
<span class="macro">assert!</span>(empty.is_sorted_by(|a, b| <span class="bool-val">false</span>));
|
|||
|
<span class="macro">assert!</span>(empty.is_sorted_by(|a, b| <span class="bool-val">true</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_sorted_by_key" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.82.0">1.82.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4155-4158">source</a></span><h4 class="code-header">pub fn <a href="#method.is_sorted_by_key" class="fn">is_sorted_by_key</a><'a, F, K>(&'a self, f: F) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a><div class="where">where
|
|||
|
F: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>) -> K,
|
|||
|
K: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a>,</div></h4></section></summary><div class="docblock"><p>Checks if the elements of this slice are sorted using the given key extraction function.</p>
|
|||
|
<p>Instead of comparing the slice’s elements directly, this function compares the keys of the
|
|||
|
elements, as determined by <code>f</code>. Apart from that, it’s equivalent to <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.is_sorted" title="method slice::is_sorted"><code>is_sorted</code></a>; see its
|
|||
|
documentation for more information.</p>
|
|||
|
<h5 id="examples-114"><a class="doc-anchor" href="#examples-114">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert!</span>([<span class="string">"c"</span>, <span class="string">"bb"</span>, <span class="string">"aaa"</span>].is_sorted_by_key(|s| s.len()));
|
|||
|
<span class="macro">assert!</span>(![-<span class="number">2i32</span>, -<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>].is_sorted_by_key(|n| n.abs()));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.partition_point" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.52.0">1.52.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4214-4216">source</a></span><h4 class="code-header">pub fn <a href="#method.partition_point" class="fn">partition_point</a><P>(&self, pred: P) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a><div class="where">where
|
|||
|
P: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a>,</div></h4></section></summary><div class="docblock"><p>Returns the index of the partition point according to the given predicate
|
|||
|
(the index of the first element of the second partition).</p>
|
|||
|
<p>The slice is assumed to be partitioned according to the given predicate.
|
|||
|
This means that all elements for which the predicate returns true are at the start of the slice
|
|||
|
and all elements for which the predicate returns false are at the end.
|
|||
|
For example, <code>[7, 15, 3, 5, 4, 12, 6]</code> is partitioned under the predicate <code>x % 2 != 0</code>
|
|||
|
(all odd numbers are at the start, all even at the end).</p>
|
|||
|
<p>If this slice is not partitioned, the returned result is unspecified and meaningless,
|
|||
|
as this method performs a kind of binary search.</p>
|
|||
|
<p>See also <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search" title="method slice::binary_search"><code>binary_search</code></a>, <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search_by" title="method slice::binary_search_by"><code>binary_search_by</code></a>, and <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.binary_search_by_key" title="method slice::binary_search_by_key"><code>binary_search_by_key</code></a>.</p>
|
|||
|
<h5 id="examples-115"><a class="doc-anchor" href="#examples-115">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>];
|
|||
|
<span class="kw">let </span>i = v.partition_point(|<span class="kw-2">&</span>x| x < <span class="number">5</span>);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(i, <span class="number">4</span>);
|
|||
|
<span class="macro">assert!</span>(v[..i].iter().all(|<span class="kw-2">&</span>x| x < <span class="number">5</span>));
|
|||
|
<span class="macro">assert!</span>(v[i..].iter().all(|<span class="kw-2">&</span>x| !(x < <span class="number">5</span>)));</code></pre></div>
|
|||
|
<p>If all elements of the slice match the predicate, including if the slice
|
|||
|
is empty, then the length of the slice will be returned:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">2</span>, <span class="number">4</span>, <span class="number">8</span>];
|
|||
|
<span class="macro">assert_eq!</span>(a.partition_point(|x| x < <span class="kw-2">&</span><span class="number">100</span>), a.len());
|
|||
|
<span class="kw">let </span>a: [i32; <span class="number">0</span>] = [];
|
|||
|
<span class="macro">assert_eq!</span>(a.partition_point(|x| x < <span class="kw-2">&</span><span class="number">100</span>), <span class="number">0</span>);</code></pre></div>
|
|||
|
<p>If you want to insert an item to a sorted vector, while maintaining
|
|||
|
sort order:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>s = <span class="macro">vec!</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>];
|
|||
|
<span class="kw">let </span>num = <span class="number">42</span>;
|
|||
|
<span class="kw">let </span>idx = s.partition_point(|<span class="kw-2">&</span>x| x <= num);
|
|||
|
s.insert(idx, num);
|
|||
|
<span class="macro">assert_eq!</span>(s, [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">42</span>, <span class="number">55</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4272">source</a><h4 class="code-header">pub fn <a href="#method.take" class="fn">take</a><'a, R>(self: &mut &'a <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, range: R) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&'a <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>><div class="where">where
|
|||
|
R: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/range/trait.OneSidedRange.html" title="trait core::ops::range::OneSidedRange">OneSidedRange</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the subslice corresponding to the given range
|
|||
|
and returns a reference to it.</p>
|
|||
|
<p>Returns <code>None</code> and does not modify the slice if the given
|
|||
|
range is out of bounds.</p>
|
|||
|
<p>Note that this method only accepts one-sided ranges such as
|
|||
|
<code>2..</code> or <code>..6</code>, but not <code>2..6</code>.</p>
|
|||
|
<h5 id="examples-116"><a class="doc-anchor" href="#examples-116">§</a>Examples</h5>
|
|||
|
<p>Taking the first three elements of a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>first_three = slice.take(..<span class="number">3</span>).unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'d'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(first_three, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]);</code></pre></div>
|
|||
|
<p>Taking the last two elements of a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>tail = slice.take(<span class="number">2</span>..).unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(tail, <span class="kw-2">&</span>[<span class="string">'c'</span>, <span class="string">'d'</span>]);</code></pre></div>
|
|||
|
<p>Getting <code>None</code> when <code>range</code> is out of bounds:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take(<span class="number">5</span>..));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take(..<span class="number">5</span>));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take(..=<span class="number">4</span>));
|
|||
|
<span class="kw">let </span>expected: <span class="kw-2">&</span>[char] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(expected), slice.take(..<span class="number">4</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4341-4344">source</a><h4 class="code-header">pub fn <a href="#method.take_mut" class="fn">take_mut</a><'a, R>(self: &mut &'a mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>, range: R) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&'a mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>><div class="where">where
|
|||
|
R: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/range/trait.OneSidedRange.html" title="trait core::ops::range::OneSidedRange">OneSidedRange</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>,</div></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the subslice corresponding to the given range
|
|||
|
and returns a mutable reference to it.</p>
|
|||
|
<p>Returns <code>None</code> and does not modify the slice if the given
|
|||
|
range is out of bounds.</p>
|
|||
|
<p>Note that this method only accepts one-sided ranges such as
|
|||
|
<code>2..</code> or <code>..6</code>, but not <code>2..6</code>.</p>
|
|||
|
<h5 id="examples-117"><a class="doc-anchor" href="#examples-117">§</a>Examples</h5>
|
|||
|
<p>Taking the first three elements of a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>first_three = slice.take_mut(..<span class="number">3</span>).unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&mut </span>[<span class="string">'d'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(first_three, <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]);</code></pre></div>
|
|||
|
<p>Taking the last two elements of a slice:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>tail = slice.take_mut(<span class="number">2</span>..).unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(tail, <span class="kw-2">&mut </span>[<span class="string">'c'</span>, <span class="string">'d'</span>]);</code></pre></div>
|
|||
|
<p>Getting <code>None</code> when <code>range</code> is out of bounds:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take_mut(<span class="number">5</span>..));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take_mut(..<span class="number">5</span>));
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take_mut(..=<span class="number">4</span>));
|
|||
|
<span class="kw">let </span>expected: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(expected), slice.take_mut(..<span class="number">4</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_first" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4380">source</a><h4 class="code-header">pub fn <a href="#method.take_first" class="fn">take_first</a><'a>(self: &mut &'a <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the first element of the slice and returns a reference
|
|||
|
to it.</p>
|
|||
|
<p>Returns <code>None</code> if the slice is empty.</p>
|
|||
|
<h5 id="examples-118"><a class="doc-anchor" href="#examples-118">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>];
|
|||
|
<span class="kw">let </span>first = slice.take_first().unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'b'</span>, <span class="string">'c'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span><span class="string">'a'</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_first_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4405">source</a><h4 class="code-header">pub fn <a href="#method.take_first_mut" class="fn">take_first_mut</a><'a>(self: &mut &'a mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a mut T</a>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the first element of the slice and returns a mutable
|
|||
|
reference to it.</p>
|
|||
|
<p>Returns <code>None</code> if the slice is empty.</p>
|
|||
|
<h5 id="examples-119"><a class="doc-anchor" href="#examples-119">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>];
|
|||
|
<span class="kw">let </span>first = slice.take_first_mut().unwrap();
|
|||
|
<span class="kw-2">*</span>first = <span class="string">'d'</span>;
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'b'</span>, <span class="string">'c'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span><span class="string">'d'</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_last" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4429">source</a><h4 class="code-header">pub fn <a href="#method.take_last" class="fn">take_last</a><'a>(self: &mut &'a <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the last element of the slice and returns a reference
|
|||
|
to it.</p>
|
|||
|
<p>Returns <code>None</code> if the slice is empty.</p>
|
|||
|
<h5 id="examples-120"><a class="doc-anchor" href="#examples-120">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>];
|
|||
|
<span class="kw">let </span>last = slice.take_last().unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span><span class="string">'c'</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_last_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4454">source</a><h4 class="code-header">pub fn <a href="#method.take_last_mut" class="fn">take_last_mut</a><'a>(self: &mut &'a mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a mut T</a>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the last element of the slice and returns a mutable
|
|||
|
reference to it.</p>
|
|||
|
<p>Returns <code>None</code> if the slice is empty.</p>
|
|||
|
<h5 id="examples-121"><a class="doc-anchor" href="#examples-121">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(slice_take)]
|
|||
|
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>];
|
|||
|
<span class="kw">let </span>last = slice.take_last_mut().unwrap();
|
|||
|
<span class="kw-2">*</span>last = <span class="string">'d'</span>;
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span><span class="string">'d'</span>);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_many_unchecked_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4488-4491">source</a><h4 class="code-header">pub unsafe fn <a href="#method.get_many_unchecked_mut" class="fn">get_many_unchecked_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(
|
|||
|
&mut self,
|
|||
|
indices: [<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>; <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">N</a>],
|
|||
|
) -> [<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>; <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">N</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>get_many_mut</code>)</span></div></span></summary><div class="docblock"><p>Returns mutable references to many indices at once, without doing any checks.</p>
|
|||
|
<p>For a safe alternative see <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.get_many_mut" title="method slice::get_many_mut"><code>get_many_mut</code></a>.</p>
|
|||
|
<h5 id="safety-14"><a class="doc-anchor" href="#safety-14">§</a>Safety</h5>
|
|||
|
<p>Calling this method with overlapping or out-of-bounds indices is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>
|
|||
|
even if the resulting references are not used.</p>
|
|||
|
<h5 id="examples-122"><a class="doc-anchor" href="#examples-122">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(get_many_mut)]
|
|||
|
|
|||
|
</span><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>];
|
|||
|
|
|||
|
<span class="kw">unsafe </span>{
|
|||
|
<span class="kw">let </span>[a, b] = x.get_many_unchecked_mut([<span class="number">0</span>, <span class="number">2</span>]);
|
|||
|
<span class="kw-2">*</span>a <span class="kw-2">*</span>= <span class="number">10</span>;
|
|||
|
<span class="kw-2">*</span>b <span class="kw-2">*</span>= <span class="number">100</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">2</span>, <span class="number">400</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.get_many_mut" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4530-4533">source</a><h4 class="code-header">pub fn <a href="#method.get_many_mut" class="fn">get_many_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>(
|
|||
|
&mut self,
|
|||
|
indices: [<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>; <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">N</a>],
|
|||
|
) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><[<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a>; <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">N</a>], <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/struct.GetManyMutError.html" title="struct core::slice::GetManyMutError">GetManyMutError</a><N>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>get_many_mut</code>)</span></div></span></summary><div class="docblock"><p>Returns mutable references to many indices at once.</p>
|
|||
|
<p>Returns an error if any index is out-of-bounds, or if the same index was
|
|||
|
passed more than once.</p>
|
|||
|
<h5 id="examples-123"><a class="doc-anchor" href="#examples-123">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(get_many_mut)]
|
|||
|
|
|||
|
</span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>];
|
|||
|
<span class="kw">if let </span><span class="prelude-val">Ok</span>([a, b]) = v.get_many_mut([<span class="number">0</span>, <span class="number">2</span>]) {
|
|||
|
<span class="kw-2">*</span>a = <span class="number">413</span>;
|
|||
|
<span class="kw-2">*</span>b = <span class="number">612</span>;
|
|||
|
}
|
|||
|
<span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">413</span>, <span class="number">2</span>, <span class="number">612</span>]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.elem_offset" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4584">source</a><h4 class="code-header">pub fn <a href="#method.elem_offset" class="fn">elem_offset</a>(&self, element: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>substr_range</code>)</span></div></span></summary><div class="docblock"><p>Returns the index that an element reference points to.</p>
|
|||
|
<p>Returns <code>None</code> if <code>element</code> does not point within the slice or if it points between elements.</p>
|
|||
|
<p>This method is useful for extending slice iterators like <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split" title="method slice::split"><code>slice::split</code></a>.</p>
|
|||
|
<p>Note that this uses pointer arithmetic and <strong>does not compare elements</strong>.
|
|||
|
To find the index of an element via comparison, use
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/iterator/trait.Iterator.html#method.position" title="method core::iter::traits::iterator::Iterator::position"><code>.iter().position()</code></a> instead.</p>
|
|||
|
<h5 id="panics-36"><a class="doc-anchor" href="#panics-36">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>T</code> is zero-sized.</p>
|
|||
|
<h5 id="examples-124"><a class="doc-anchor" href="#examples-124">§</a>Examples</h5>
|
|||
|
<p>Basic usage:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(substr_range)]
|
|||
|
|
|||
|
</span><span class="kw">let </span>nums: <span class="kw-2">&</span>[u32] = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">7</span>, <span class="number">1</span>, <span class="number">1</span>];
|
|||
|
<span class="kw">let </span>num = <span class="kw-2">&</span>nums[<span class="number">2</span>];
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(num, <span class="kw-2">&</span><span class="number">1</span>);
|
|||
|
<span class="macro">assert_eq!</span>(nums.elem_offset(num), <span class="prelude-val">Some</span>(<span class="number">2</span>));</code></pre></div>
|
|||
|
<p>Returning <code>None</code> with an in-between element:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(substr_range)]
|
|||
|
|
|||
|
</span><span class="kw">let </span>arr: <span class="kw-2">&</span>[[u32; <span class="number">2</span>]] = <span class="kw-2">&</span>[[<span class="number">0</span>, <span class="number">1</span>], [<span class="number">2</span>, <span class="number">3</span>]];
|
|||
|
<span class="kw">let </span>flat_arr: <span class="kw-2">&</span>[u32] = arr.as_flattened();
|
|||
|
|
|||
|
<span class="kw">let </span>ok_elm: <span class="kw-2">&</span>[u32; <span class="number">2</span>] = flat_arr[<span class="number">0</span>..<span class="number">2</span>].try_into().unwrap();
|
|||
|
<span class="kw">let </span>weird_elm: <span class="kw-2">&</span>[u32; <span class="number">2</span>] = flat_arr[<span class="number">1</span>..<span class="number">3</span>].try_into().unwrap();
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(ok_elm, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>]);
|
|||
|
<span class="macro">assert_eq!</span>(weird_elm, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(arr.elem_offset(ok_elm), <span class="prelude-val">Some</span>(<span class="number">0</span>)); <span class="comment">// Points to element 0
|
|||
|
</span><span class="macro">assert_eq!</span>(arr.elem_offset(weird_elm), <span class="prelude-val">None</span>); <span class="comment">// Points between element 0 and 1</span></code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.subslice_range" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4637">source</a><h4 class="code-header">pub fn <a href="#method.subslice_range" class="fn">subslice_range</a>(&self, subslice: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.83.0/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>>></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>substr_range</code>)</span></div></span></summary><div class="docblock"><p>Returns the range of indices that a subslice points to.</p>
|
|||
|
<p>Returns <code>None</code> if <code>subslice</code> does not point within the slice or if it points between elements.</p>
|
|||
|
<p>This method <strong>does not compare elements</strong>. Instead, this method finds the location in the slice that
|
|||
|
<code>subslice</code> was obtained from. To find the index of a subslice via comparison, instead use
|
|||
|
<a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.windows" title="method slice::windows"><code>.windows()</code></a><a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/iterator/trait.Iterator.html#method.position" title="method core::iter::traits::iterator::Iterator::position"><code>.position()</code></a>.</p>
|
|||
|
<p>This method is useful for extending slice iterators like <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.split" title="method slice::split"><code>slice::split</code></a>.</p>
|
|||
|
<p>Note that this may return a false positive (either <code>Some(0..0)</code> or <code>Some(self.len()..self.len())</code>)
|
|||
|
if <code>subslice</code> has a length of zero and points to the beginning or end of another, separate, slice.</p>
|
|||
|
<h5 id="panics-37"><a class="doc-anchor" href="#panics-37">§</a>Panics</h5>
|
|||
|
<p>Panics if <code>T</code> is zero-sized.</p>
|
|||
|
<h5 id="examples-125"><a class="doc-anchor" href="#examples-125">§</a>Examples</h5>
|
|||
|
<p>Basic usage:</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(substr_range)]
|
|||
|
|
|||
|
</span><span class="kw">let </span>nums = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">5</span>, <span class="number">10</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">5</span>];
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>iter = nums
|
|||
|
.split(|t| <span class="kw-2">*</span>t == <span class="number">0</span>)
|
|||
|
.map(|n| nums.subslice_range(n).unwrap());
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="number">0</span>..<span class="number">0</span>));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="number">1</span>..<span class="number">3</span>));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="number">4</span>..<span class="number">4</span>));
|
|||
|
<span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="number">5</span>..<span class="number">6</span>));</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_flattened" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4687">source</a></span><h4 class="code-header">pub fn <a href="#method.as_flattened" class="fn">as_flattened</a>(&self) -> &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a></h4></section></summary><div class="docblock"><p>Takes a <code>&[[T; N]]</code>, and flattens it to a <code>&[T]</code>.</p>
|
|||
|
<h5 id="panics-38"><a class="doc-anchor" href="#panics-38">§</a>Panics</h5>
|
|||
|
<p>This panics if the length of the resulting slice would overflow a <code>usize</code>.</p>
|
|||
|
<p>This is only possible when flattening a slice of arrays of zero-sized
|
|||
|
types, and thus tends to be irrelevant in practice. If
|
|||
|
<code>size_of::<T>() > 0</code>, this will never panic.</p>
|
|||
|
<h5 id="examples-126"><a class="doc-anchor" href="#examples-126">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], [<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]].as_flattened(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);
|
|||
|
|
|||
|
<span class="macro">assert_eq!</span>(
|
|||
|
[[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], [<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]].as_flattened(),
|
|||
|
[[<span class="number">1</span>, <span class="number">2</span>], [<span class="number">3</span>, <span class="number">4</span>], [<span class="number">5</span>, <span class="number">6</span>]].as_flattened(),
|
|||
|
);
|
|||
|
|
|||
|
<span class="kw">let </span>slice_of_empty_arrays: <span class="kw-2">&</span>[[i32; <span class="number">0</span>]] = <span class="kw-2">&</span>[[], [], [], [], []];
|
|||
|
<span class="macro">assert!</span>(slice_of_empty_arrays.as_flattened().is_empty());
|
|||
|
|
|||
|
<span class="kw">let </span>empty_slice_of_arrays: <span class="kw-2">&</span>[[u32; <span class="number">10</span>]] = <span class="kw-2">&</span>[];
|
|||
|
<span class="macro">assert!</span>(empty_slice_of_arrays.as_flattened().is_empty());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.as_flattened_mut" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.80.0">1.80.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4723">source</a></span><h4 class="code-header">pub fn <a href="#method.as_flattened_mut" class="fn">as_flattened_mut</a>(&mut self) -> &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a></h4></section></summary><div class="docblock"><p>Takes a <code>&mut [[T; N]]</code>, and flattens it to a <code>&mut [T]</code>.</p>
|
|||
|
<h5 id="panics-39"><a class="doc-anchor" href="#panics-39">§</a>Panics</h5>
|
|||
|
<p>This panics if the length of the resulting slice would overflow a <code>usize</code>.</p>
|
|||
|
<p>This is only possible when flattening a slice of arrays of zero-sized
|
|||
|
types, and thus tends to be irrelevant in practice. If
|
|||
|
<code>size_of::<T>() > 0</code>, this will never panic.</p>
|
|||
|
<h5 id="examples-127"><a class="doc-anchor" href="#examples-127">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>add_5_to_all(slice: <span class="kw-2">&mut </span>[i32]) {
|
|||
|
<span class="kw">for </span>i <span class="kw">in </span>slice {
|
|||
|
<span class="kw-2">*</span>i += <span class="number">5</span>;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>array = [[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], [<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>], [<span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>]];
|
|||
|
add_5_to_all(array.as_flattened_mut());
|
|||
|
<span class="macro">assert_eq!</span>(array, [[<span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>], [<span class="number">9</span>, <span class="number">10</span>, <span class="number">11</span>], [<span class="number">12</span>, <span class="number">13</span>, <span class="number">14</span>]]);</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_floats" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4760">source</a><h4 class="code-header">pub fn <a href="#method.sort_floats" class="fn">sort_floats</a>(&mut self)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>sort_floats</code>)</span></div></span></summary><div class="docblock"><p>Sorts the slice of floats.</p>
|
|||
|
<p>This sort is in-place (i.e. does not allocate), <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case, and uses
|
|||
|
the ordering defined by <a href="https://doc.rust-lang.org/1.83.0/core/primitive.f32.html#method.total_cmp" title="method f32::total_cmp"><code>f32::total_cmp</code></a>.</p>
|
|||
|
<h5 id="current-implementation-6"><a class="doc-anchor" href="#current-implementation-6">§</a>Current implementation</h5>
|
|||
|
<p>This uses the same sorting algorithm as <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.sort_unstable_by" title="method slice::sort_unstable_by"><code>sort_unstable_by</code></a>.</p>
|
|||
|
<h5 id="examples-128"><a class="doc-anchor" href="#examples-128">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(sort_floats)]
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">2.6</span>, -<span class="number">5e-8</span>, f32::NAN, <span class="number">8.29</span>, f32::INFINITY, -<span class="number">1.0</span>, <span class="number">0.0</span>, -f32::INFINITY, -<span class="number">0.0</span>];
|
|||
|
|
|||
|
v.sort_floats();
|
|||
|
<span class="kw">let </span>sorted = [-f32::INFINITY, -<span class="number">1.0</span>, -<span class="number">5e-8</span>, -<span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">2.6</span>, <span class="number">8.29</span>, f32::INFINITY, f32::NAN];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&</span>v[..<span class="number">8</span>], <span class="kw-2">&</span>sorted[..<span class="number">8</span>]);
|
|||
|
<span class="macro">assert!</span>(v[<span class="number">8</span>].is_nan());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_floats-1" class="method"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/slice/mod.rs.html#4789">source</a><h4 class="code-header">pub fn <a href="#method.sort_floats-1" class="fn">sort_floats</a>(&mut self)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>sort_floats</code>)</span></div></span></summary><div class="docblock"><p>Sorts the slice of floats.</p>
|
|||
|
<p>This sort is in-place (i.e. does not allocate), <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case, and uses
|
|||
|
the ordering defined by <a href="https://doc.rust-lang.org/1.83.0/core/primitive.f64.html#method.total_cmp" title="method f64::total_cmp"><code>f64::total_cmp</code></a>.</p>
|
|||
|
<h5 id="current-implementation-7"><a class="doc-anchor" href="#current-implementation-7">§</a>Current implementation</h5>
|
|||
|
<p>This uses the same sorting algorithm as <a href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html#method.sort_unstable_by" title="method slice::sort_unstable_by"><code>sort_unstable_by</code></a>.</p>
|
|||
|
<h5 id="examples-129"><a class="doc-anchor" href="#examples-129">§</a>Examples</h5>
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#![feature(sort_floats)]
|
|||
|
</span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">2.6</span>, -<span class="number">5e-8</span>, f64::NAN, <span class="number">8.29</span>, f64::INFINITY, -<span class="number">1.0</span>, <span class="number">0.0</span>, -f64::INFINITY, -<span class="number">0.0</span>];
|
|||
|
|
|||
|
v.sort_floats();
|
|||
|
<span class="kw">let </span>sorted = [-f64::INFINITY, -<span class="number">1.0</span>, -<span class="number">5e-8</span>, -<span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">2.6</span>, <span class="number">8.29</span>, f64::INFINITY, f64::NAN];
|
|||
|
<span class="macro">assert_eq!</span>(<span class="kw-2">&</span>v[..<span class="number">8</span>], <span class="kw-2">&</span>sorted[..<span class="number">8</span>]);
|
|||
|
<span class="macro">assert!</span>(v[<span class="number">8</span>].is_nan());</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.utf8_chunks" class="method"><span class="rightside"><span class="since" title="Stable since Rust version 1.79.0">1.79.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/str/lossy.rs.html#44">source</a></span><h4 class="code-header">pub fn <a href="#method.utf8_chunks" class="fn">utf8_chunks</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/str/lossy/struct.Utf8Chunks.html" title="struct core::str::lossy::Utf8Chunks">Utf8Chunks</a><'_></h4></section></summary><div class="docblock"><p>Creates an iterator over the contiguous valid UTF-8 ranges of this
|
|||
|
slice, and the non-UTF-8 fragments in between.</p>
|
|||
|
<p>See the <a href="https://doc.rust-lang.org/1.83.0/core/str/lossy/struct.Utf8Chunk.html" title="struct core::str::lossy::Utf8Chunk"><code>Utf8Chunk</code></a> type for documenation of the items yielded by this iterator.</p>
|
|||
|
<h5 id="examples-130"><a class="doc-anchor" href="#examples-130">§</a>Examples</h5>
|
|||
|
<p>This function formats arbitrary but mostly-UTF-8 bytes into Rust source
|
|||
|
code in the form of a C-string literal (<code>c"..."</code>).</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::fmt::Write <span class="kw">as _</span>;
|
|||
|
|
|||
|
<span class="kw">pub fn </span>cstr_literal(bytes: <span class="kw-2">&</span>[u8]) -> String {
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>repr = String::new();
|
|||
|
repr.push_str(<span class="string">"c\""</span>);
|
|||
|
<span class="kw">for </span>chunk <span class="kw">in </span>bytes.utf8_chunks() {
|
|||
|
<span class="kw">for </span>ch <span class="kw">in </span>chunk.valid().chars() {
|
|||
|
<span class="comment">// Escapes \0, \t, \r, \n, \\, \', \", and uses \u{...} for non-printable characters.
|
|||
|
</span><span class="macro">write!</span>(repr, <span class="string">"{}"</span>, ch.escape_debug()).unwrap();
|
|||
|
}
|
|||
|
<span class="kw">for </span>byte <span class="kw">in </span>chunk.invalid() {
|
|||
|
<span class="macro">write!</span>(repr, <span class="string">"\\x{:02X}"</span>, byte).unwrap();
|
|||
|
}
|
|||
|
}
|
|||
|
repr.push(<span class="string">'"'</span>);
|
|||
|
repr
|
|||
|
}
|
|||
|
|
|||
|
<span class="kw">fn </span>main() {
|
|||
|
<span class="kw">let </span>lit = cstr_literal(<span class="string">b"\xferris the \xf0\x9f\xa6\x80\x07"</span>);
|
|||
|
<span class="kw">let </span>expected = <span class="macro">stringify!</span>(<span class="string">c"\xFErris the 🦀\u{7}"</span>);
|
|||
|
<span class="macro">assert_eq!</span>(lit, expected);
|
|||
|
}</code></pre></div>
|
|||
|
</div></details></div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsMut%3C%5BT%5D%3E-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1178-1183">source</a><a href="#impl-AsMut%3C%5BT%5D%3E-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.as_mut-1" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1180-1182">source</a><a href="#method.as_mut-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsMut.html#tymethod.as_mut" class="fn">as_mut</a>(&mut self) -> &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a></h4></section></summary><div class='docblock'>Converts this type into a mutable reference of the (usually inferred) input type.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsMut%3CVec%3CT,+N%3E%3E-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1164-1169">source</a><a href="#impl-AsMut%3CVec%3CT,+N%3E%3E-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.as_mut" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1166-1168">source</a><a href="#method.as_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsMut.html#tymethod.as_mut" class="fn">as_mut</a>(&mut self) -> &mut Self</h4></section></summary><div class='docblock'>Converts this type into a mutable reference of the (usually inferred) input type.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsRef%3C%5BT%5D%3E-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1171-1176">source</a><a href="#impl-AsRef%3C%5BT%5D%3E-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.as_ref-1" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1173-1175">source</a><a href="#method.as_ref-1" class="anchor">§</a><h4 class="code-heade
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.clone" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1189-1191">source</a><a href="#method.clone" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html#tymethod.clone" class="fn">clone</a>(&self) -> Self</h4></section></summary><div class='docblock'>Returns a copy of the value. <a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html#tymethod.clone">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.clone_from" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/clone.rs.html#174">source</a></span><a href="#method.clone_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html#method.clone_from" class="fn">clone_from</a>(&mut self, source: &Self)</h4></section></summary><div class='docblock'>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html#method.clone_from">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#836-843">source</a><a href="#impl-Debug-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#840-842">source</a><a href="#method.fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&self, f: &mut <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a><'_>) -> <a class="type" href="https://doc.rust-lang.org/1.83.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#830-834">source</a><a href="#impl-Default-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.default" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#831-833">source</a><a href="#method.default" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/default/trait.Default.html#tymethod.default" class="fn">default</a>() -> Self</h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a href="https://doc.rust-lang.org/1.83.0/core/default/trait.Default.html#tymethod.default">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Deref-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1143-1149">source</a><a href="#impl-Deref-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Target" class="associatedtype trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1144">source</a><a href="#associatedtype.Target" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.83.0/core/ops/deref/trait.Deref.html#associatedtype.Target" class="associatedtype">Target</a> = <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a></h4></section></summary><div class='docblock'>The resulting type after dereferencing.</div></details><details class="toggle method-toggle" open><summary><section id="method.deref" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1146-1148">source</a><a href="#method.deref" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/ops/deref/trait.Deref.html#tymethod.deref" class="fn">deref</a>(&self) -> &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.s
|
|||
|
T: 'a + <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.extend-2" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#884-889">source</a><a href="#method.extend-2" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#tymethod.extend" class="fn">extend</a><I>(&mut self, iter: I)<div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a>>,</div></h4></section></summary><div class='docblock'>Extends a collection with the contents of an iterator. <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#tymethod.extend">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.extend_one-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/iter/traits/collect.rs.html#454">source</a><a href="#method.extend_one-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#method.extend_one" class="fn">extend_one</a>(&mut self, item: A)</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>extend_one</code>)</span></div></span><div class='docblock'>Extends a collection with exactly one element.</div></details><details class="toggle method-toggle" open><summary><section id="method.extend_reserve-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/iter/traits/collect.rs.html#462">source</a><a href="#method.extend_reserve-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#method.extend_reserve" class="fn">extend_reserve</a>(&mut self, additional: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>extend_one</code>)</span></div></span><div class='docblock'>Reserves capacity in a collection for the given number of additional elements. <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#method.extend_reserve">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Extend%3CT%3E-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#871-878">source</a><a href="#impl-Extend%3CT%3E-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html" title="trait core::iter::traits::collect::Extend">Extend</a><T> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.extend-1" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#872-877">source</a><a href="#method.extend-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#tymethod.extend" class="fn">extend</a><I>(&mut self, iter: I)<div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = T>,</div></h4></section></summary><div class='docblock'>Extends a collection with the contents of an iterator. <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#tymethod.extend">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.extend_one" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/iter/traits/collect.rs.html#454">source</a><a href="#method.extend_one" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#method.extend_one" class="fn">extend_one</a>(&mut self, item: A)</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>extend_one</code>)</span></div></span><div class='docblock'>Extends a collection with exactly one element.</div></details><details class="toggle method-toggle" open><summary><section id="method.extend_reserve" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/iter/traits/collect.rs.html#462">source</a><a href="#method.extend_reserve" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#method.extend_reserve" class="fn">extend_reserve</a>(&mut self, additional: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>)</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>extend_one</code>)</span></div></span><div class='docblock'>Reserves capacity in a collection for the given number of additional elements. <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.Extend.html#method.extend_reserve">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-FromIterator%3CT%3E-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#928-939">source</a><a href="#impl-FromIterator%3CT%3E-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.FromIterator.html" title="trait core::iter::traits::collect::FromIterator">FromIterator</a><T> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from_iter" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#929-938">source</a><a href="#method.from_iter" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter" class="fn">from_iter</a><I>(iter: I) -> Self<div class="where">where
|
|||
|
I: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a><Item = T>,</div></h4></section></summary><div class='docblock'>Creates a value from an iterator. <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Hash-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#892-899">source</a><a href="#impl-Hash-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.hash" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#896-898">source</a><a href="#method.hash" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hash.html#tymethod.hash" class="fn">hash</a><H: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>>(&self, state: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut H</a>)</h4></section></summary><div class='docblock'>Feeds this value into the given <a href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hash.html#tymethod.hash">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.hash_slice" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.3.0">1.3.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/hash/mod.rs.html#235-237">source</a></span><a href="#method.hash_slice" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hash.html#method.hash_slice" class="fn">hash_slice</a><H>(data: &[Self], state: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut H</a>)<div class="where">where
|
|||
|
H: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Hash-for-Vec%3CT,+N%3E-1" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#901-908">source</a><a href="#impl-Hash-for-Vec%3CT,+N%3E-1" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="../hash32/trait.Hash.html" title="trait hash32::Hash">Hash</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="../hash32/trait.Hash.html" title="trait hash32::Hash">Hash</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.hash-1" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#905-907">source</a><a href="#method.hash-1" class="anchor">§</a><h4 class="code-header">fn <a href="../hash32/trait.Hash.html#tymethod.hash" class="fn">hash</a><H: <a class="trait" href="../hash32/trait.Hasher.html" title="trait hash32::Hasher">Hasher</a>>(&self, state: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut H</a>)</h4></section></summary><div class='docblock'>Feeds this value into the given <code>Hasher</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.hash_slice-1" class="method trait-impl"><a class="src rightside" href="../src/hash32/lib.rs.html#192-195">source</a><a href="#method.hash_slice-1" class="anchor">§</a><h4 class="code-header">fn <a href="../hash32/trait.Hash.html#method.hash_slice" class="fn">hash_slice</a><H>(data: &[Self], state: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut H</a>)<div class="where">where
|
|||
|
H: <a class="trait" href="../hash32/trait.Hasher.html" title="trait hash32::Hasher">Hasher</a>,
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <code>Hasher</code>.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-IntoIterator-for-%26Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#910-917">source</a><a href="#impl-IntoIterator-for-%26Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<'a, T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a> for &'a <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Item" class="associatedtype trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#911">source</a><a href="#associatedtype.Item" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.Item" class="associatedtype">Item</a> = <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&'a T</a></h4></section></summary><div class='docblock'>The type of the elements being iterated over.</div></details><details class="toggle" open><summary><section id="associatedtype.IntoIter" class="associatedtype trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#912">source</a><a href="#associatedtype.IntoIter" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.IntoIter" class="associatedtype">IntoIter</a> = <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/slice/iter/struct.Iter.html" title="struct core::slice::iter::Iter">Iter</a><'a, T></h4></section></summary><div class='docblock'>Which kind of iterator are we turning this into?</div></details><details class="toggle method-toggle" open><summary><section id="method.into_iter" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#914-916">source</a><a href="#method.into_iter" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html#tymethod.into_iter" class="fn">into_iter</a>(self) -> Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.IntoIter" title="type core::iter::traits::collect::IntoIterator::IntoIter">IntoIter</a></h4></section></summary><div class='docblock'>Creates an iterator from a value. <a href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html#tymethod.into_iter">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-IntoIterator-for-%26mut+Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#919-926">source</a><a href="#impl-IntoIterator-for-%26mut+Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<'a, T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a> for &'a mut <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Item-1" class="associatedtype trait-impl"><a class="sr
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.cmp" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1138-1140">source</a><a href="#method.cmp" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#tymethod.cmp" class="fn">cmp</a>(&self, other: &Self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a></h4></section></summary><div class='docblock'>This method returns an <a href="https://doc.rust-lang.org/1.83.0/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering"><code>Ordering</code></a> between <code>self</code> and <code>other</code>. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#tymethod.cmp">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.max" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.21.0">1.21.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#980-982">source</a></span><a href="#method.max" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#method.max" class="fn">max</a>(self, other: Self) -> Self<div class="where">where
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Compares and returns the maximum of two values. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#method.max">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.min" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.21.0">1.21.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#1001-1003">source</a></span><a href="#method.min" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#method.min" class="fn">min</a>(self, other: Self) -> Self<div class="where">where
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Compares and returns the minimum of two values. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#method.min">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.clamp" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.50.0">1.50.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#1027-1029">source</a></span><a href="#method.clamp" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#method.clamp" class="fn">clamp</a>(self, min: Self, max: Self) -> Self<div class="where">where
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Restrict a value to a certain interval. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Ord.html#method.clamp">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3C%26%5BB%5D%3E-for-Vec%3CA,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1038-1045">source</a><a href="#impl-PartialEq%3C%26%5BB%5D%3E-for-Vec%3CA,+N%3E" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-3" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1042-1044">source</a><a href="#method.eq-3" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-3" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-3" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3C%26%5BB;+M%5D%3E-for-Vec%3CA,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1101-1108">source</a><a href="#impl-PartialEq%3C%26%5BB;+M%5D%3E-for-Vec%3CA,+N%3E" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, const M: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[B; M]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-9" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1105-1107">source</a><a href="#method.eq-9" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &&<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[B; M]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-9" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-9" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3C%26mut+%5BB%5D%3E-for-Vec%3CA,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1058-1065">source</a><a href="#impl-PartialEq%3C%26mut+%5BB%5D%3E-for-Vec%3CA,+N%3E" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-5" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1062-1064">source</a><a href="#method.eq-5" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &&mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-5" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-5" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3C%5BB%5D%3E-for-Vec%3CA,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1018-1025">source</a><a href="#impl-PartialEq%3C%5BB%5D%3E-for-Vec%3CA,+N%3E" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-1" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1022-1024">source</a><a href="#method.eq-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-1" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3C%5BB;+M%5D%3E-for-Vec%3CA,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1079-1086">source</a><a href="#impl-PartialEq%3C%5BB;+M%5D%3E-for-Vec%3CA,+N%3E" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, const M: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[B; M]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-7" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1083-1085">source</a><a href="#method.eq-7" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[B; M]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-7" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-7" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%26%5BB%5D" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1048-1055">source</a><a href="#impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%26%5BB%5D" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>> for &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-4" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1052-1054">source</a><a href="#method.eq-4" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-4" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-4" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%26%5BB;+M%5D" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1112-1119">source</a><a href="#impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%26%5BB;+M%5D" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, const M: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>> for &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[B; M]</a><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-10" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1116-1118">source</a><a href="#method.eq-10" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-10" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-10" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%26mut+%5BB%5D" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1068-1075">source</a><a href="#impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%26mut+%5BB%5D" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>> for &mut <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-6" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1072-1074">source</a><a href="#method.eq-6" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-6" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-6" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%5BB%5D" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1028-1035">source</a><a href="#impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%5BB%5D" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>> for <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[B]</a><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-2" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1032-1034">source</a><a href="#method.eq-2" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-2" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-2" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%5BB;+M%5D" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1090-1097">source</a><a href="#impl-PartialEq%3CVec%3CA,+N%3E%3E-for-%5BB;+M%5D" class="anchor">§</a><h3 class="code-header">impl<A, B, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, const M: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>> for <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.array.html">[B; M]</a><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq-8" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1094-1096">source</a><a href="#method.eq-8" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne-8" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne-8" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CVec%3CB,+N2%3E%3E-for-Vec%3CA,+N1%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1008-1015">source</a><a href="#impl-PartialEq%3CVec%3CB,+N2%3E%3E-for-Vec%3CA,+N1%3E" class="anchor">§</a><h3 class="code-header">impl<A, B, const N1: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, const N2: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><B, N2>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><A, N1><div class="where">where
|
|||
|
A: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><B>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1012-1014">source</a><a href="#method.eq" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><B, N2>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialOrd%3CVec%3CT,+N2%3E%3E-for-Vec%3CT,+N1%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1124-1131">source</a><a href="#impl-PartialOrd%3CVec%3CT,+N2%3E%3E-for-Vec%3CT,+N1%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N1: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>, const N2: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a><<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N2>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N1><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.partial_cmp" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1128-1130">source</a><a href="#method.partial_cmp" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#tymethod.partial_cmp" class="fn">partial_cmp</a>(&self, other: &<a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N2>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="https://doc.rust-lang.org/1.83.0/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>></h4></section></summary><div class='docblock'>This method returns an ordering between <code>self</code> and <code>other</code> values if one exists. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#tymethod.partial_cmp">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.lt" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#1335">source</a></span><a href="#method.lt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.lt" class="fn">lt</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests less than (for <code>self</code> and <code>other</code>) and is used by the <code><</code> operator. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.lt">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.le" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#1353">source</a></span><a href="#method.le" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.le" class="fn">le</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests less than or equal to (for <code>self</code> and <code>other</code>) and is used by the
|
|||
|
<code><=</code> operator. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.le">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.gt" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#1371">source</a></span><a href="#method.gt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.gt" class="fn">gt</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests greater than (for <code>self</code> and <code>other</code>) and is used by the <code>></code>
|
|||
|
operator. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.gt">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.ge" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/cmp.rs.html#1389">source</a></span><a href="#method.ge" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.ge" class="fn">ge</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests greater than or equal to (for <code>self</code> and <code>other</code>) and is used by
|
|||
|
the <code>>=</code> operator. <a href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.PartialOrd.html#method.ge">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3C%26%5BT%5D%3E-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#863-869">source</a><a href="#impl-TryFrom%3C%26%5BT%5D%3E-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<'a, T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><&'a <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#864">source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#866-868">source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(slice: &'a <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><Self, Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Write-for-Vec%3Cu8,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#845-852">source</a><a href="#impl-Write-for-Vec%3Cu8,+N%3E" class="anchor">§</a><h3 class="code-header">impl<const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html" title="trait core::fmt::Write">Write</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.u8.html">u8</a>, N></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.write_str" class="method trait-impl"><a class="src rightside" href="../src/heapless/vec.rs.html#846-851">source</a><a href="#method.write_str" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html#tymethod.write_str" class="fn">write_str</a>(&mut self, s: &<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.str.html">str</a>) -> <a class="type" href="https://doc.rust-lang.org/1.83.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'>Writes a string slice into this wri
|
|||
|
succeeded. <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html#tymethod.write_str">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_char" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.1.0">1.1.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/fmt/mod.rs.html#174">source</a></span><a href="#method.write_char" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html#method.write_char" class="fn">write_char</a>(&mut self, c: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.char.html">char</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/fmt/struct.Error.html" title="struct core::fmt::Error">Error</a>></h4></section></summary><div class='docblock'>Writes a <a href="https://doc.rust-lang.org/1.83.0/core/primitive.char.html" title="primitive char"><code>char</code></a> into this writer, returning whether the write succeeded. <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html#method.write_char">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.write_fmt" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.83.0/src/core/fmt/mod.rs.html#202">source</a></span><a href="#method.write_fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html#method.write_fmt" class="fn">write_fmt</a>(&mut self, args: <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/fmt/struct.Arguments.html" title="struct core::fmt::Arguments">Arguments</a><'_>) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/fmt/struct.Error.html" title="struct core::fmt::Error">Error</a>></h4></section></summary><div class='docblock'>Glue for usage of the <a href="https://doc.rust-lang.org/1.83.0/core/macro.write.html" title="macro core::write"><code>write!</code></a> macro with implementors of this trait. <a href="https://doc.rust-lang.org/1.83.0/core/fmt/trait.Write.html#method.write_fmt">Read more</a></div></details></div></details><section id="impl-Eq-for-Vec%3CT,+N%3E" class="impl"><a class="src rightside" href="../src/heapless/vec.rs.html#1122">source</a><a href="#impl-Eq-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a>,</div></h3></section></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-Vec%3CT,+N%3E" class="impl"><a href="#impl-Freeze-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section id="impl-RefUnwindSafe-for-Vec%3CT,+N%3E" class="impl"><a href="#impl-RefUnwindSafe-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</div></h3></section><section id="impl-Send-for-Vec%3CT,+N%3E" class="impl"><a href="#impl-Send-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section><section id="impl-Sync-for-Vec%3CT,+N%3E" class="impl"><a href="#impl-Sync-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</div></h3></section><section id="impl-Unpin-for-Vec%3CT,+N%3E" class="impl"><a href="#impl-Unpin-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</div></h3></section><section id="impl-UnwindSafe-for-Vec%3CT,+N%3E" class="impl"><a href="#impl-UnwindSafe-for-Vec%3CT,+N%3E" class="anchor">§</a><h3 class="code-header">impl<T, const N: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.usize.html">usize</a>> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.Vec.html" title="struct heapless::Vec">Vec</a><T, N><div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</div></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/any.rs.html#138">source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
|
|||
|
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/any.rs.html#139">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.83.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/borrow.rs.html#209">source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><T> for T<div class="where">where
|
|||
|
T: ?<a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/borrow.rs.html#211">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/borrow.rs.html#217">source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T<div class="where">where
|
|||
|
T: ?<a class="trait" href="https://doc.rust-lang.org/1.83.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/borrow.rs.html#218">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.reference.html">&mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CloneToUninit-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/clone.rs.html#273">source</a><a href="#impl-CloneToUninit-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.CloneToUninit.html" title="trait core::clone::CloneToUninit">CloneToUninit</a> for T<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.clone_to_uninit" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/clone.rs.html#275">source</a><a href="#method.clone_to_uninit" class="anchor">§</a><h4 class="code-header">unsafe fn <a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit" class="fn">clone_to_uninit</a>(&self, dst: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/core/primitive.pointer.html">*mut T</a>)</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>clone_to_uninit</code>)</span></div></span><div class='docblock'>Performs copy-assignment from <code>self</code> to <code>dst</code>. <a href="https://doc.rust-lang.org/1.83.0/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#765">source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#768">source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -> T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
|
|||
|
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#748-750">source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><U> for T<div class="where">where
|
|||
|
U: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#758">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -> U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
|
|||
|
<p>That is, this conversion is whatever the implementation of
|
|||
|
<code><a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
|
|||
|
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#805-807">source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U> for T<div class="where">where
|
|||
|
U: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-2" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#809">source</a><a href="#associatedtype.Error-2" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#812">source</a><a href="#method.try_from-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, <T as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#790-792">source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><U> for T<div class="where">where
|
|||
|
U: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#794">source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = <U as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.83.0/src/core/convert/mod.rs.html#797">source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -> <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><U, <U as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>
|