# [−] [src] Function rand::seq::index::sample

    pub fn sample<R: ?Sized>(rng: &mut R, length: usize, amount: usize) -> IndexVec where
        R: Rng,

Randomly sample exactly `amount` distinct indices from `0..length`, and return them in random order (fully shuffled).

This method is used internally by the slice sampling methods, but it can sometimes be useful to have the indices themselves so this is provided as an alternative.

The implementation used is not specified; we automatically select the fastest available algorithm for the `length` and `amount` parameters (based on detailed profiling on an Intel Haswell CPU). Roughly speaking, complexity is `O(amount)`, except that when `amount` is small, performance is closer to `O(amount^2)`, and when `length` is close to `amount` then `O(length)`.

Note that performance is significantly better over `u32` indices than over `u64` indices. Because of this we hide the underlying type behind an abstraction, `IndexVec`.

If an allocation-free `no_std` function is required, it is suggested to adapt the internal `sample_floyd` implementation.

Panics if `amount > length`.

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)