Trait Index

1.6.0 (const: unstable) ยท Source
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ยง

1.0.0 ยท Source

type Output: ?Sized

The returned type after indexing.

Required Methodsยง

1.0.0 ยท Source

fn index(&self, index: Idx) -> &Self::Output

Performs the indexing (container[index]) operation.

ยงPanics

May panic if the index is out of bounds.

Implementorsยง

ยง

impl Index<&str> for QuerySolution

ยง

type Output = Term

ยง

impl Index<&Variable> for QuerySolution

ยง

type Output = Term

Sourceยง

impl Index<usize> for ByteString

ยง

impl Index<usize> for BStr

ยง

impl Index<usize> for BStr

ยง

impl Index<usize> for Bytes

ยง

impl Index<usize> for Bytes

ยง

impl Index<usize> for QuerySolution

ยง

type Output = Term

Sourceยง

impl Index<Range<Position>> for Url

ยง

impl Index<Range<usize>> for UninitSlice

Sourceยง

impl Index<Range<usize>> for ByteString

ยง

impl Index<Range<usize>> for ArchivedString

ยง

impl Index<Range<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<Range<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<Range<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<Range<usize>> for Bytes

ยง

type Output = Bytes

Sourceยง

impl Index<RangeFrom<Position>> for Url

ยง

impl Index<RangeFrom<usize>> for UninitSlice

1.47.0 ยท Sourceยง

impl Index<RangeFrom<usize>> for CStr

Sourceยง

impl Index<RangeFrom<usize>> for ByteString

ยง

impl Index<RangeFrom<usize>> for ArchivedString

ยง

impl Index<RangeFrom<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeFrom<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeFrom<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeFrom<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeFull> for UninitSlice

Sourceยง

impl Index<RangeFull> for ByteString

1.7.0 ยท Sourceยง

impl Index<RangeFull> for CString

1.0.0 ยท Sourceยง

impl Index<RangeFull> for OsString

Sourceยง

impl Index<RangeFull> for Url

ยง

impl Index<RangeFull> for ArchivedCString

ยง

impl Index<RangeFull> for ArchivedString

ยง

impl Index<RangeFull> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeFull> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeFull> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeFull> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeInclusive<usize>> for UninitSlice

Sourceยง

impl Index<RangeInclusive<usize>> for ByteString

ยง

impl Index<RangeInclusive<usize>> for ArchivedString

ยง

impl Index<RangeInclusive<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeInclusive<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeInclusive<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeInclusive<usize>> for Bytes

ยง

type Output = Bytes

Sourceยง

impl Index<RangeTo<Position>> for Url

ยง

impl Index<RangeTo<usize>> for UninitSlice

Sourceยง

impl Index<RangeTo<usize>> for ByteString

ยง

impl Index<RangeTo<usize>> for ArchivedString

ยง

impl Index<RangeTo<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeTo<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeTo<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeTo<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeToInclusive<usize>> for UninitSlice

Sourceยง

impl Index<RangeToInclusive<usize>> for ByteString

ยง

impl Index<RangeToInclusive<usize>> for ArchivedString

ยง

impl Index<RangeToInclusive<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeToInclusive<usize>> for BStr

ยง

type Output = BStr

ยง

impl Index<RangeToInclusive<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<RangeToInclusive<usize>> for Bytes

ยง

type Output = Bytes

ยง

impl Index<Span> for str

ยง

impl Index<Span> for str

ยง

impl Index<Span> for [u8]

ยง

type Output = [u8]

ยง

impl Index<Span> for [u8]

ยง

type Output = [u8]

ยง

impl Index<Variable> for QuerySolution

ยง

type Output = Term

ยง

impl Index<VariableRef<'_>> for QuerySolution

ยง

type Output = Term

ยง

impl<'a, K, V, Q> Index<&'a Q> for LinearMap<K, V>
where K: Eq + Borrow<Q>, Q: Eq + ?Sized,

ยง

type Output = V

ยง

impl<'a, K, V, S, Q> Index<&'a Q> for LinkedHashMap<K, V, S>
where K: Hash + Eq + Borrow<Q>, S: BuildHasher, Q: Eq + Hash + ?Sized,

ยง

type Output = V

Sourceยง

impl<'a, K, V, T> Index<&'a T> for phf::map::Map<K, V>
where T: Eq + PhfHash + ?Sized, K: PhfBorrow<T>,

Sourceยง

impl<'a, K, V, T> Index<&'a T> for OrderedMap<K, V>
where T: Eq + PhfHash + ?Sized, K: PhfBorrow<T>,

ยง

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.

ยง

type Output = [u8]

ยง

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.

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.

ยง

type Output = [u8]

ยง

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>>]>,

ยง

type Output = <I as SliceIndex<[Spanned<DeValue<'i>>]>>::Output

ยง

impl<'i, T> Index<usize> for CssRuleList<'i, T>

ยง

type Output = CssRule<'i, T>

ยง

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

Sourceยง

impl<I> Index<I> for serde_json::value::Value
where I: Index,

1.0.0 (const: unstable) ยท Sourceยง

impl<I> Index<I> for str
where I: SliceIndex<str>,

Sourceยง

impl<I> Index<I> for ByteStr
where I: SliceIndex<ByteStr>,

1.0.0 ยท Sourceยง

impl<I> Index<I> for String
where I: SliceIndex<str>,

ยง

impl<I> Index<I> for AlignedVec
where I: SliceIndex<[u8]>,

ยง

type Output = <I as SliceIndex<[u8]>>::Output

ยง

impl<I> Index<I> for DeValue<'_>
where I: Index,

ยง

type Output = Spanned<DeValue<'_>>

ยง

impl<I> Index<I> for Value
where I: Index,

ยง

type Output = Value

Sourceยง

impl<I, T, const N: usize> Index<I> for Simd<T, N>

ยง

impl<K, Q, V> Index<&Q> for ArchivedBTreeMap<K, V>
where K: Borrow<Q> + Ord, Q: Ord + ?Sized,

ยง

type Output = V

ยง

impl<K, Q, V> Index<&Q> for ArchivedHashMap<K, V>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized,

ยง

type Output = V

1.0.0 ยท Sourceยง

impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
where A: Allocator + Clone, K: Borrow<Q> + Ord, Q: Ord + ?Sized,

1.0.0 ยท Sourceยง

impl<K, Q, V, S> Index<&Q> for std::collections::hash::map::HashMap<K, V, S>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher,

ยง

impl<K, Q, V, S> Index<&Q> for AHashMap<K, V, S>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher,

ยง

type Output = V

ยง

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher, A: Allocator + Clone,

ยง

type Output = V

ยง

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash, Q: Hash + Equivalent<K> + ?Sized, S: BuildHasher, A: Allocator,

ยง

type Output = V

ยง

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash, Q: Hash + Equivalent<K> + ?Sized, S: BuildHasher, A: Allocator,

ยง

type Output = V

ยง

impl<K, T> Index<K> for HeaderMap<T>
where K: AsHeaderName,

ยง

type Output = T

ยง

impl<K, V> Index<(Bound<usize>, Bound<usize>)> for Slice<K, V>

ยง

type Output = Slice<K, V>

ยง

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!
ยง

type Output = K

ยง

impl<K, V> Index<usize> for Slice<K, V>

ยง

type Output = V

ยง

impl<K, V> Index<Range<usize>> for Slice<K, V>

ยง

type Output = Slice<K, V>

ยง

impl<K, V> Index<RangeFrom<usize>> for Slice<K, V>

ยง

type Output = Slice<K, V>

ยง

impl<K, V> Index<RangeFull> for Slice<K, V>

ยง

type Output = Slice<K, V>

ยง

impl<K, V> Index<RangeInclusive<usize>> for Slice<K, V>

ยง

type Output = Slice<K, V>

ยง

impl<K, V> Index<RangeTo<usize>> for Slice<K, V>

ยง

type Output = Slice<K, V>

ยง

impl<K, V> Index<RangeToInclusive<usize>> for Slice<K, V>

ยง

type Output = Slice<K, V>

Sourceยง

impl<K, V> Index<K> for SlotMap<K, V>
where K: Key,

Sourceยง

impl<K, V> Index<K> for DenseSlotMap<K, V>
where K: Key,

Sourceยง

impl<K, V> Index<K> for HopSlotMap<K, V>
where K: Key,

Sourceยง

impl<K, V> Index<K> for SecondaryMap<K, V>
where K: Key,

ยง

impl<K, V, Q> Index<&Q> for Map<K, V>
where K: Borrow<Q> + Ord, Q: Ord + Eq + Hash + ?Sized,

Access an element of this map. Panics if the given key is not present in the map.

ยง

type Output = V

ยง

impl<K, V, Q, S> Index<&Q> for IndexMap<K, V, S>
where Q: Hash + Equivalent<K> + ?Sized, S: BuildHasher,

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!
ยง

type Output = V

ยง

impl<K, V, S> Index<(Bound<usize>, Bound<usize>)> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

ยง

impl<K, V, S> Index<&K> for LiteMap<K, V, S>
where K: Ord, S: Store<K, V>,

ยง

type Output = V

ยง

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!
ยง

type Output = V

ยง

impl<K, V, S> Index<Range<usize>> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

ยง

impl<K, V, S> Index<RangeFrom<usize>> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

ยง

impl<K, V, S> Index<RangeFull> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

ยง

impl<K, V, S> Index<RangeInclusive<usize>> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

ยง

impl<K, V, S> Index<RangeTo<usize>> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

ยง

impl<K, V, S> Index<RangeToInclusive<usize>> for IndexMap<K, V, S>

ยง

type Output = Slice<K, V>

Sourceยง

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>
where String: Borrow<Q>, Q: Ord + Eq + Hash + ?Sized,

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,
}
ยง

impl<T> Index<(Bound<usize>, Bound<usize>)> for Slice<T>

ยง

type Output = Slice<T>

Sourceยง

impl<T> Index<usize> for StackRef<T>
where T: Stackable,

ยง

impl<T> Index<usize> for Slab<T>

ยง

type Output = T

ยง

impl<T> Index<usize> for Slice<T>

ยง

type Output = T

ยง

impl<T> Index<Range<usize>> for Slice<T>

ยง

type Output = Slice<T>

ยง

impl<T> Index<RangeFrom<usize>> for Slice<T>

ยง

type Output = Slice<T>

ยง

impl<T> Index<RangeFull> for Slice<T>

ยง

type Output = Slice<T>

ยง

impl<T> Index<RangeInclusive<usize>> for Slice<T>

ยง

type Output = Slice<T>

ยง

impl<T> Index<RangeTo<usize>> for Slice<T>

ยง

type Output = Slice<T>

ยง

impl<T> Index<RangeToInclusive<usize>> for Slice<T>

ยง

type Output = Slice<T>

ยง

impl<T> Index<PatternID> for [T]

ยง

type Output = T

ยง

impl<T> Index<PatternID> for [T]

ยง

type Output = T

ยง

impl<T> Index<PatternID> for alloc::vec::Vec<T>

ยง

type Output = T

ยง

impl<T> Index<PatternID> for alloc::vec::Vec<T>

ยง

type Output = T

ยง

impl<T> Index<SmallIndex> for [T]

ยง

type Output = T

ยง

impl<T> Index<SmallIndex> for [T]

ยง

type Output = T

ยง

impl<T> Index<SmallIndex> for alloc::vec::Vec<T>

ยง

type Output = T

ยง

impl<T> Index<SmallIndex> for alloc::vec::Vec<T>

ยง

type Output = T

ยง

impl<T> Index<StateID> for [T]

ยง

type Output = T

ยง

impl<T> Index<StateID> for [T]

ยง

type Output = T

ยง

impl<T> Index<StateID> for alloc::vec::Vec<T>

ยง

type Output = T

ยง

impl<T> Index<StateID> for alloc::vec::Vec<T>

ยง

type Output = T

1.0.0 ยท Sourceยง

impl<T, A> Index<usize> for VecDeque<T, A>
where A: Allocator,

ยง

impl<T, F> Index<usize> for VarZeroSlice<T, F>
where T: VarULE + ?Sized, F: VarZeroVecFormat,

ยง

type Output = T

1.0.0 (const: unstable) ยท Sourceยง

impl<T, I> Index<I> for [T]
where I: SliceIndex<[T]>,

ยง

impl<T, I> Index<I> for ArchivedVec<T>
where I: SliceIndex<[T]>,

ยง

type Output = <[T] as Index<I>>::Output

ยง

impl<T, I> Index<I> for RawArchivedVec<T>
where I: SliceIndex<[T]>,

ยง

type Output = <[T] as Index<I>>::Output

ยง

impl<T, I> Index<I> for ScratchVec<T>
where I: SliceIndex<[T]>,

1.0.0 ยท Sourceยง

impl<T, I, A> Index<I> for alloc::vec::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,

1.50.0 (const: unstable) ยท Sourceยง

impl<T, I, const N: usize> Index<I> for [T; N]
where [T]: Index<I>,

Sourceยง

impl<T, P> Index<usize> for Punctuated<T, P>

ยง

impl<T, S> Index<(Bound<usize>, Bound<usize>)> for IndexSet<T, S>

ยง

type Output = Slice<T>

ยง

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!
ยง

type Output = T

ยง

impl<T, S> Index<Range<usize>> for IndexSet<T, S>

ยง

type Output = Slice<T>

ยง

impl<T, S> Index<RangeFrom<usize>> for IndexSet<T, S>

ยง

type Output = Slice<T>

ยง

impl<T, S> Index<RangeFull> for IndexSet<T, S>

ยง

type Output = Slice<T>

ยง

impl<T, S> Index<RangeInclusive<usize>> for IndexSet<T, S>

ยง

type Output = Slice<T>

ยง

impl<T, S> Index<RangeTo<usize>> for IndexSet<T, S>

ยง

type Output = Slice<T>

ยง

impl<T, S> Index<RangeToInclusive<usize>> for IndexSet<T, S>

ยง

type Output = Slice<T>