# select

select(v, k, [by=,] [lt=,] [rev=false])

Variant of `select!` which copies `v` before partially sorting it, thereby returning the same thing as `select!` but leaving `v` unmodified.

## Examples

In the Julia programming language, the function `select(v, k, [by=<transform>,] [lt=<comparison>,] [rev=false])` is a variant of `select!`. It returns a partially sorted copy of `v` without modifying the original `v` array. The `select` function allows you to select the `k`-th element from `v` based on optional sorting and filtering criteria.

``````julia> select([6, 5, 4, 3, 2, 1], 3)
3

julia> select([6, 5, 4, 3, 2, 1], 3, lt=<)
4

julia> select([6, 5, 4, 3, 2, 1], 3, by=x -> x^2)
9

julia> select(["apple", "banana", "orange", "grape"], 2)
"banana"

julia> select(["apple", "banana", "orange", "grape"], 2, by=length)
"grape"``````

Common examples of its use:

1. Select the k-th smallest element from an array:

``````julia> select([6, 5, 4, 3, 2, 1], 3)
3``````

This example selects the 3rd smallest element from the given array.

2. Select the k-th smallest element using a custom comparison:

``````julia> select([6, 5, 4, 3, 2, 1], 3, lt=<)
4``````

The `lt=<` argument specifies the less-than comparison operator. This example selects the 3rd smallest element using the custom comparison.

3. Select the k-th element based on a transformation:

``````julia> select([6, 5, 4, 3, 2, 1], 3, by=x -> x^2)
9``````

The `by=x -> x^2` argument applies the transformation `x^2` before selecting the k-th element. In this case, it selects the 3rd smallest squared element.

4. Select the k-th element from an array of strings:

``````julia> select(["apple", "banana", "orange", "grape"], 2)
"banana"``````

It selects the 2nd element from an array of strings.

5. Select the k-th element based on a transformation for strings:
``````julia> select(["apple", "banana", "orange", "grape"], 2, by=length)
"grape"``````

The `by=length` argument applies the `length` function before selecting the k-th element based on the length of the strings.

Note: Since `select` creates a copy of the array `v`, it can be used to extract elements without modifying the original array.