pub trait Index<Idx>where
Idx: ?Sized,{
type Output: ?Sized;
// Required method
fn index(&self, index: Idx) -> &Self::Output;
}
Expand description
Used for indexing operations (container[index]
) in immutable contexts.
container[index]
is actually syntactic sugar for *container.index(index)
,
but only when used as an immutable value. If a mutable value is requested,
IndexMut
is used instead. This allows nice things such as
let value = v[index]
if the type of value
implements Copy
.
§Examples
The following example implements Index
on a read-only NucleotideCount
container, enabling individual counts to be retrieved with index syntax.
use std::ops::Index;
enum Nucleotide {
A,
C,
G,
T,
}
struct NucleotideCount {
a: usize,
c: usize,
g: usize,
t: usize,
}
impl Index<Nucleotide> for NucleotideCount {
type Output = usize;
fn index(&self, nucleotide: Nucleotide) -> &Self::Output {
match nucleotide {
Nucleotide::A => &self.a,
Nucleotide::C => &self.c,
Nucleotide::G => &self.g,
Nucleotide::T => &self.t,
}
}
}
let nucleotide_count = NucleotideCount {a: 14, c: 9, g: 10, t: 12};
assert_eq!(nucleotide_count[Nucleotide::A], 14);
assert_eq!(nucleotide_count[Nucleotide::C], 9);
assert_eq!(nucleotide_count[Nucleotide::G], 10);
assert_eq!(nucleotide_count[Nucleotide::T], 12);
Required Associated Types§
Required Methods§
Implementors§
source§impl<'a, K, T> Index<K> for http::header::map::HeaderMap<T>where
K: AsHeaderName,
impl<'a, K, T> Index<K> for http::header::map::HeaderMap<T>where
K: AsHeaderName,
§impl<'a, K, V> Index<usize> for Keys<'a, K, V>
impl<'a, K, V> Index<usize> for Keys<'a, K, V>
Access [IndexMap
] keys at indexed positions.
While Index<usize> for IndexMap
accesses a map’s values,
indexing through [IndexMap::keys
] offers an alternative to access a map’s
keys instead.
Since Keys
is also an iterator, consuming items from the iterator will
offset the effective indexes. Similarly, if Keys
is obtained from
[Slice::keys
], indexes will be interpreted relative to the position of
that slice.
§Examples
use indexmap::IndexMap;
let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map[0], "LOREM");
assert_eq!(map.keys()[0], "lorem");
assert_eq!(map[1], "IPSUM");
assert_eq!(map.keys()[1], "ipsum");
map.reverse();
assert_eq!(map.keys()[0], "amet");
assert_eq!(map.keys()[1], "sit");
map.sort_keys();
assert_eq!(map.keys()[0], "amet");
assert_eq!(map.keys()[1], "dolor");
// Advancing the iterator will offset the indexing
let mut keys = map.keys();
assert_eq!(keys[0], "amet");
assert_eq!(keys.next().map(|s| &**s), Some("amet"));
assert_eq!(keys[0], "dolor");
assert_eq!(keys[1], "ipsum");
// Slices may have an offset as well
let slice = &map[2..];
assert_eq!(slice[0], "IPSUM");
assert_eq!(slice.keys()[0], "ipsum");
use indexmap::IndexMap;
let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map.keys()[10]); // panics!
§impl<'h> Index<usize> for Captures<'h>
impl<'h> Index<usize> for Captures<'h>
Get a matching capture group’s haystack substring by index.
The haystack substring returned can’t outlive the Captures
object if this
method is used, because of how Index
is defined (normally a[i]
is part
of a
and can’t outlive it). To work around this limitation, do that, use
[Captures::get
] instead.
'h
is the lifetime of the matched haystack, but the lifetime of the
&str
returned by this implementation is the lifetime of the Captures
value itself.
§Panics
If there is no matching group at the given index.
§impl<'h> Index<usize> for Captures<'h>
impl<'h> Index<usize> for Captures<'h>
Get a matching capture group’s haystack substring by index.
The haystack substring returned can’t outlive the Captures
object if this
method is used, because of how Index
is defined (normally a[i]
is part
of a
and can’t outlive it). To work around this limitation, do that, use
[Captures::get
] instead.
'h
is the lifetime of the matched haystack, but the lifetime of the
&str
returned by this implementation is the lifetime of the Captures
value itself.
§Panics
If there is no matching group at the given index.
§impl<'h, 'n> Index<&'n str> for Captures<'h>
impl<'h, 'n> Index<&'n str> for Captures<'h>
Get a matching capture group’s haystack substring by name.
The haystack substring returned can’t outlive the Captures
object if this
method is used, because of how Index
is defined (normally a[i]
is part
of a
and can’t outlive it). To work around this limitation, do that, use
[Captures::name
] instead.
'h
is the lifetime of the matched haystack, but the lifetime of the
&str
returned by this implementation is the lifetime of the Captures
value itself.
'n
is the lifetime of the group name used to index the Captures
value.
§Panics
If there is no matching group at the given name.
§impl<'h, 'n> Index<&'n str> for Captures<'h>
impl<'h, 'n> Index<&'n str> for Captures<'h>
Get a matching capture group’s haystack substring by name.
The haystack substring returned can’t outlive the Captures
object if this
method is used, because of how Index
is defined (normally a[i]
is part
of a
and can’t outlive it). To work around this limitation, do that, use
[Captures::name
] instead.
'h
is the lifetime of the matched haystack, but the lifetime of the
&str
returned by this implementation is the lifetime of the Captures
value itself.
'n
is the lifetime of the group name used to index the Captures
value.
§Panics
If there is no matching group at the given name.
§impl<'input, Endian> Index<RangeFrom<usize>> for EndianSlice<'input, Endian>where
Endian: Endianity,
impl<'input, Endian> Index<RangeFrom<usize>> for EndianSlice<'input, Endian>where
Endian: Endianity,
§impl<'s, T, I> Index<I> for SliceVec<'s, T>where
I: SliceIndex<[T]>,
impl<'s, T, I> Index<I> for SliceVec<'s, T>where
I: SliceIndex<[T]>,
type Output = <I as SliceIndex<[T]>>::Output
§impl<A, I> Index<I> for ArrayVec<A>where
A: Array,
I: SliceIndex<[<A as Array>::Item]>,
impl<A, I> Index<I> for ArrayVec<A>where
A: Array,
I: SliceIndex<[<A as Array>::Item]>,
type Output = <I as SliceIndex<[<A as Array>::Item]>>::Output
§impl<A, I> Index<I> for SmallVec<A>where
A: Array,
I: SliceIndex<[<A as Array>::Item]>,
impl<A, I> Index<I> for SmallVec<A>where
A: Array,
I: SliceIndex<[<A as Array>::Item]>,
type Output = <I as SliceIndex<[<A as Array>::Item]>>::Output
§impl<A, I> Index<I> for TinyVec<A>where
A: Array,
I: SliceIndex<[<A as Array>::Item]>,
impl<A, I> Index<I> for TinyVec<A>where
A: Array,
I: SliceIndex<[<A as Array>::Item]>,
type Output = <I as SliceIndex<[<A as Array>::Item]>>::Output
§impl<A, O, Idx> Index<Idx> for BitArray<A, O>where
A: BitViewSized,
O: BitOrder,
BitSlice<<A as BitView>::Store, O>: Index<Idx>,
impl<A, O, Idx> Index<Idx> for BitArray<A, O>where
A: BitViewSized,
O: BitOrder,
BitSlice<<A as BitView>::Store, O>: Index<Idx>,
1.0.0 · source§impl<I> Index<I> for strwhere
I: SliceIndex<str>,
impl<I> Index<I> for strwhere
I: SliceIndex<str>,
type Output = <I as SliceIndex<str>>::Output
§impl<I> Index<I> for H256where
I: SliceIndex<[u8]>,
impl<I> Index<I> for H256where
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
1.0.0 · source§impl<I> Index<I> for Stringwhere
I: SliceIndex<str>,
impl<I> Index<I> for Stringwhere
I: SliceIndex<str>,
type Output = <I as SliceIndex<str>>::Output
§impl<I> Index<I> for H160where
I: SliceIndex<[u8]>,
impl<I> Index<I> for H160where
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for H512where
I: SliceIndex<[u8]>,
impl<I> Index<I> for H512where
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for H128where
I: SliceIndex<[u8]>,
impl<I> Index<I> for H128where
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for H384where
I: SliceIndex<[u8]>,
impl<I> Index<I> for H384where
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for H768where
I: SliceIndex<[u8]>,
impl<I> Index<I> for H768where
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Hashwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I> Index<I> for Midstatewhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for Midstatewhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
§impl<I, T> Index<I> for Hash<T>where
I: SliceIndex<[u8]>,
T: Tag,
impl<I, T> Index<I> for Hash<T>where
I: SliceIndex<[u8]>,
T: Tag,
type Output = <I as SliceIndex<[u8]>>::Output
source§impl<I, T, const N: usize> Index<I> for Simd<T, N>
impl<I, T, const N: usize> Index<I> for Simd<T, N>
type Output = <I as SliceIndex<[T]>>::Output
§impl<K, V> Index<K> for BoxedSlice<K, V>where
K: EntityRef,
impl<K, V> Index<K> for BoxedSlice<K, V>where
K: EntityRef,
Immutable indexing into a BoxedSlice
.
The indexed value must be in the map.
§impl<K, V> Index<K> for PrimaryMap<K, V>where
K: EntityRef,
impl<K, V> Index<K> for PrimaryMap<K, V>where
K: EntityRef,
Immutable indexing into an PrimaryMap
.
The indexed value must be in the map.
§impl<K, V> Index<K> for SecondaryMap<K, V>where
K: EntityRef,
V: Clone,
impl<K, V> Index<K> for SecondaryMap<K, V>where
K: EntityRef,
V: Clone,
Immutable indexing into an SecondaryMap
.
All keys are permitted. Untouched entries have the default value.
source§impl<K, V, Q, S> Index<&Q> for indexmap::map::IndexMap<K, V, S>
impl<K, V, Q, S> Index<&Q> for indexmap::map::IndexMap<K, V, S>
Access IndexMap
values corresponding to a key.
§Examples
use indexmap::IndexMap;
let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map["lorem"], "LOREM");
assert_eq!(map["ipsum"], "IPSUM");
use indexmap::IndexMap;
let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map["bar"]); // panics!
§impl<K, V, Q, S> Index<&Q> for IndexMap<K, V, S>
impl<K, V, Q, S> Index<&Q> for IndexMap<K, V, S>
Access [IndexMap
] values corresponding to a key.
§Examples
use indexmap::IndexMap;
let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map["lorem"], "LOREM");
assert_eq!(map["ipsum"], "IPSUM");
use indexmap::IndexMap;
let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map["bar"]); // panics!
source§impl<K, V, S> Index<usize> for indexmap::map::IndexMap<K, V, S>
impl<K, V, S> Index<usize> for indexmap::map::IndexMap<K, V, S>
Access IndexMap
values at indexed positions.
§Examples
use indexmap::IndexMap;
let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map[0], "LOREM");
assert_eq!(map[1], "IPSUM");
map.reverse();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "SIT");
map.sort_keys();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "DOLOR");
use indexmap::IndexMap;
let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map[10]); // panics!
§impl<K, V, S> Index<usize> for IndexMap<K, V, S>
impl<K, V, S> Index<usize> for IndexMap<K, V, S>
Access [IndexMap
] values at indexed positions.
See Index<usize> for Keys
to access a map’s keys instead.
§Examples
use indexmap::IndexMap;
let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map[0], "LOREM");
assert_eq!(map[1], "IPSUM");
map.reverse();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "SIT");
map.sort_keys();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "DOLOR");
use indexmap::IndexMap;
let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map[10]); // panics!
source§impl<Q> Index<&Q> for Map<String, Value>
impl<Q> Index<&Q> for Map<String, Value>
Access an element of this map. Panics if the given key is not present in the map.
match val {
Value::String(s) => Some(s.as_str()),
Value::Array(arr) => arr[0].as_str(),
Value::Object(map) => map["type"].as_str(),
_ => None,
}
1.0.0 · source§impl<T, I> Index<I> for [T]where
I: SliceIndex<[T]>,
impl<T, I> Index<I> for [T]where
I: SliceIndex<[T]>,
type Output = <I as SliceIndex<[T]>>::Output
1.0.0 · source§impl<T, I, A> Index<I> for gclient::ext::sp_runtime::app_crypto::Vec<T, A>
impl<T, I, A> Index<I> for gclient::ext::sp_runtime::app_crypto::Vec<T, A>
type Output = <I as SliceIndex<[T]>>::Output
§impl<T, I, A> Index<I> for Vec<T, A>where
I: SliceIndex<[T]>,
A: Allocator,
impl<T, I, A> Index<I> for Vec<T, A>where
I: SliceIndex<[T]>,
A: Allocator,
type Output = <I as SliceIndex<[T]>>::Output
§impl<T, O> Index<RangeInclusive<usize>> for BitSlice<T, O>where
O: BitOrder,
T: BitStore,
impl<T, O> Index<RangeInclusive<usize>> for BitSlice<T, O>where
O: BitOrder,
T: BitStore,
§impl<T, O> Index<RangeToInclusive<usize>> for BitSlice<T, O>where
O: BitOrder,
T: BitStore,
impl<T, O> Index<RangeToInclusive<usize>> for BitSlice<T, O>where
O: BitOrder,
T: BitStore,
§impl<T, O, Idx> Index<Idx> for BitBox<T, O>where
T: BitStore,
O: BitOrder,
BitSlice<T, O>: Index<Idx>,
impl<T, O, Idx> Index<Idx> for BitBox<T, O>where
T: BitStore,
O: BitOrder,
BitSlice<T, O>: Index<Idx>,
§impl<T, O, Idx> Index<Idx> for BitVec<T, O>where
T: BitStore,
O: BitOrder,
BitSlice<T, O>: Index<Idx>,
impl<T, O, Idx> Index<Idx> for BitVec<T, O>where
T: BitStore,
O: BitOrder,
BitSlice<T, O>: Index<Idx>,
source§impl<T, S> Index<usize> for indexmap::set::IndexSet<T, S>
impl<T, S> Index<usize> for indexmap::set::IndexSet<T, S>
Access IndexSet
values at indexed positions.
§Examples
use indexmap::IndexSet;
let mut set = IndexSet::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
set.insert(word.to_string());
}
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "ipsum");
set.reverse();
assert_eq!(set[0], "amet");
assert_eq!(set[1], "sit");
set.sort();
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "amet");
use indexmap::IndexSet;
let mut set = IndexSet::new();
set.insert("foo");
println!("{:?}", set[10]); // panics!
§impl<T, S> Index<usize> for IndexSet<T, S>
impl<T, S> Index<usize> for IndexSet<T, S>
Access [IndexSet
] values at indexed positions.
§Examples
use indexmap::IndexSet;
let mut set = IndexSet::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
set.insert(word.to_string());
}
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "ipsum");
set.reverse();
assert_eq!(set[0], "amet");
assert_eq!(set[1], "sit");
set.sort();
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "amet");
use indexmap::IndexSet;
let mut set = IndexSet::new();
set.insert("foo");
println!("{:?}", set[10]); // panics!