Skip to main content

Index

Trait Index 

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

type Output: ?Sized

The returned type after indexing.

Required Methodsยง

1.0.0 (const: unstable) ยท Source

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

Performs the indexing (container[index]) operation.

ยงPanics

May panic if the index is out of bounds.

Dyn Compatibilityยง

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementorsยง

Sourceยง

impl Index<Range<usize>> for ByteString

Sourceยง

impl Index<RangeFrom<usize>> for ByteString

1.47.0 ยท Sourceยง

impl Index<RangeFrom<usize>> for CStr

1.96.0 ยท Sourceยง

impl Index<RangeFrom<usize>> for CStr

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<RangeInclusive<usize>> for ByteString

Sourceยง

impl Index<RangeTo<usize>> for ByteString

Sourceยง

impl Index<RangeToInclusive<usize>> for ByteString

Sourceยง

impl Index<usize> for ByteString

Sourceยง

impl<I, T, const N: usize> Index<I> for Simd<T, N>
where T: SimdElement, I: SliceIndex<[T]>,

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

1.0.0 (const: unstable) ยท Sourceยง

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

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, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher, A: Allocator,

1.0.0 ยท Sourceยง

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

1.0.0 (const: unstable) ยท Sourceยง

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

1.0.0 (const: unstable) ยท Sourceยง

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