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ยง
ยงimpl Index<Range<usize>> for UninitSlice
impl Index<Range<usize>> for UninitSlice
type Output = UninitSlice
ยงimpl Index<RangeFrom<usize>> for UninitSlice
impl Index<RangeFrom<usize>> for UninitSlice
type Output = UninitSlice
ยงimpl Index<RangeFull> for UninitSlice
impl Index<RangeFull> for UninitSlice
type Output = UninitSlice
ยงimpl Index<RangeInclusive<usize>> for UninitSlice
impl Index<RangeInclusive<usize>> for UninitSlice
type Output = UninitSlice
Sourceยงimpl Index<RangeInclusive<usize>> for ByteString
impl Index<RangeInclusive<usize>> for ByteString
ยงimpl Index<RangeTo<usize>> for UninitSlice
impl Index<RangeTo<usize>> for UninitSlice
type Output = UninitSlice
ยงimpl Index<RangeToInclusive<usize>> for UninitSlice
impl Index<RangeToInclusive<usize>> for UninitSlice
type Output = UninitSlice
Sourceยงimpl Index<RangeToInclusive<usize>> for ByteString
impl Index<RangeToInclusive<usize>> for ByteString
Sourceยงimpl<'a, K, V, T> Index<&'a T> for OrderedMap<K, V>
impl<'a, K, V, T> Index<&'a T> for OrderedMap<K, V>
ยงimpl<'h> Index<usize> for Captures<'h>
Get a matching capture groupโs haystack substring by index.
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>
Get a matching capture groupโs haystack substring by index.
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>
Get a matching capture groupโs haystack substring by name.
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>
Get a matching capture groupโs haystack substring by name.
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<'i, I> Index<I> for DeArray<'i>where
I: SliceIndex<[Spanned<DeValue<'i>>]>,
impl<'i, I> Index<I> for DeArray<'i>where
I: SliceIndex<[Spanned<DeValue<'i>>]>,
type Output = <I as SliceIndex<[Spanned<DeValue<'i>>]>>::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<I> Index<I> for AlignedVecwhere
I: SliceIndex<[u8]>,
impl<I> Index<I> for AlignedVecwhere
I: SliceIndex<[u8]>,
type Output = <I as SliceIndex<[u8]>>::Output
ยงimpl<K, V> Index<usize> for Keys<'_, K, V>
Access [IndexMap
] keys at indexed positions.
impl<K, V> Index<usize> for Keys<'_, 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 indices. Similarly, if Keys
is obtained from
[Slice::keys
], indices 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<K, V, Q> Index<&Q> for Map<K, V>
Access an element of this map. Panics if the given key is not present in the
map.
impl<K, V, Q> Index<&Q> for Map<K, V>
Access an element of this map. Panics if the given key is not present in the map.
ยงimpl<K, V, Q, S> Index<&Q> for IndexMap<K, V, S>
Access [IndexMap
] values corresponding to a key.
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!
ยงimpl<K, V, S> Index<usize> for IndexMap<K, V, S>
Access [IndexMap
] values at indexed positions.
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<K, V, S> Index<K> for SparseSecondaryMap<K, V, S>where
K: Key,
S: BuildHasher,
impl<K, V, S> Index<K> for SparseSecondaryMap<K, V, S>where
K: Key,
S: BuildHasher,
Sourceยงimpl<Q> Index<&Q> for serde_json::map::Map<String, Value>
Access an element of this map. Panics if the given key is not present in the
map.
impl<Q> Index<&Q> for serde_json::map::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,
}
Sourceยงimpl<T> Index<usize> for StackRef<T>where
T: Stackable,
impl<T> Index<usize> for StackRef<T>where
T: Stackable,
type Output = <T as ForeignType>::Ref
ยงimpl<T, I> Index<I> for ArchivedVec<T>where
I: SliceIndex<[T]>,
impl<T, I> Index<I> for ArchivedVec<T>where
I: SliceIndex<[T]>,
ยงimpl<T, I> Index<I> for RawArchivedVec<T>where
I: SliceIndex<[T]>,
impl<T, I> Index<I> for RawArchivedVec<T>where
I: SliceIndex<[T]>,
ยงimpl<T, I> Index<I> for ScratchVec<T>where
I: SliceIndex<[T]>,
impl<T, I> Index<I> for ScratchVec<T>where
I: SliceIndex<[T]>,
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, S> Index<usize> for IndexSet<T, S>
Access [IndexSet
] values at indexed positions.
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!