# selectperm!

selectperm!(ix, v, k, [alg=,] [by=,] [lt=,] [rev=false,] [initialized=false])

Like `selectperm`, but accepts a preallocated index vector `ix`. If `initialized` is `false` (the default), ix is initialized to contain the values `1:length(ix)`.

## Examples

The `selectperm!` function in Julia is used to generate a permutation of a given collection based on specific criteria. It is similar to the `selectperm` function, but instead of returning a new permutation, it modifies the preallocated index vector `ix` in place.

``````julia> v = [10, 5, 20, 15, 30];
julia> ix = collect(1:length(v));
julia> selectperm!(ix, v, 3)
5-element Array{Int64,1}:
2
1
4
3
5``````

In this example, the `selectperm!` function generates a permutation of the index vector `ix` based on the values in `v` such that the resulting permutation represents the indices of the top 3 elements in descending order. The resulting modified `ix` vector is `[2, 1, 4, 3, 5]`.

The optional parameters that can be passed to `selectperm!` are:

• `alg`: Specifies the algorithm to use for the permutation. Default is `<algorithm>`.
• `by`: Optional transformation function to apply to the elements of the collection before comparing them.
• `lt`: Optional comparison function to use for sorting the elements.
• `rev`: Specifies whether the permutation should be in reverse order. Default is `false`.
• `initialized`: Specifies whether the index vector `ix` is preinitialized. Default is `false`.

Example with optional parameters:

``````julia> v = [7, 2, 5, 9, 3];
julia> ix = collect(1:length(v));
julia> selectperm!(ix, v, 2, by = x -> x^2, rev = true)
5-element Array{Int64,1}:
4
3
1
5
2``````

In this example, the `selectperm!` function generates a permutation of the index vector `ix` based on the squared values of `v` in descending order. The resulting modified `ix` vector is `[4, 3, 1, 5, 2]`.