// generic method in Rust is done using generics with type parameters
fn swap<T: Copy>(arr: &mut [T], i: usize, j: usize) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
fn main() {
// Integer array
let mut nums = [10, 20, 30, 40];
println!("Before swap (int): {:?}", nums);
swap(&mut nums, 1, 3);
println!("After swap (int): {:?}", nums);
println!();
// String slice array
let mut words = ["Rust", "Python", "Java", "Go"];
println!("Before swap (str): {:?}", words);
swap(&mut words, 0, 2);
println!("After swap (str): {:?}", words);
println!();
// Float array
let mut floats = [1.1, 2.2, 3.3, 4.4];
println!("Before swap (float): {:?}", floats);
swap(&mut floats, 2, 3);
println!("After swap (float): {:?}", floats);
}
/*
run:
Before swap (int): [10, 20, 30, 40]
After swap (int): [10, 40, 30, 20]
Before swap (str): ["Rust", "Python", "Java", "Go"]
After swap (str): ["Java", "Python", "Rust", "Go"]
Before swap (float): [1.1, 2.2, 3.3, 4.4]
After swap (float): [1.1, 2.2, 4.4, 3.3]
*/