| Crates.io | slice_ops |
| lib.rs | slice_ops |
| version | 1.0.7 |
| created_at | 2023-12-29 00:27:29.753525+00 |
| updated_at | 2025-02-05 15:33:06.59645+00 |
| description | A selection of useful slice operations. |
| homepage | |
| repository | https://github.com/sigurd4/slice_ops |
| max_upload_size | |
| id | 1082832 |
| size | 113,687 |
Provides many useful utility methods for slices.
This crate is a subset of the crate array__ops.
integratedifferentiateuse slice_ops::ops::*;
let mut x = [1, 5, 5, 6, 2, -1, 0, 0, 0];
x.differentiate();
assert_eq!(x, [1, 4, 0, 1, -4, -3, 1, 0, 0]);
x.integrate();
assert_eq!(x, [1, 5, 5, 6, 2, -1, 0, 0, 0]);
find / rfindfind_by / rfind_byfind_by_key / rfind_byuse slice_ops::ops::*;
// v
let x = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3];
let i = x.find(&5).unwrap();
assert_eq!(i, 4);
assert_eq!(x[i], 5);
argmax / argminargmax_by / argmin_byargmax_by_key / argmin_by_keyuse slice_ops::ops::*;
// v
let x = [1, 5, 5, 6, 2, -1, 0, -4, -1, 6];
let i = x.argmax().unwrap();
assert_eq!(i, 3);
visit / visit_mutrvisit / rvisit_mutvisit_async / visit_mut_asynctry_visit / try_visit_muttry_rvisit / try_rvisit_muttry_visit_async / try_visit_mut_asyncuse slice_ops::ops::*;
let mut x = [0; 8];
let mut i = 0;
x.visit_mut(|e| {
i += 1;
*e = i;
});
assert_eq!(x, [1, 2, 3, 4, 5, 6, 7, 8]);
add_assign_all / add_assign_all_asyncsub_assign_all / sub_assign_all_asyncmul_assign_all / mul_assign_all_asyncdiv_assign_all / div_assign_all_asyncrem_assign_all / rem_assign_all_asyncshl_assign_all / shl_assign_all_asyncshr_assign_all / shr_assign_all_asyncbitor_assign_all / bitor_assign_all_asyncbitand_assign_all / bitand_assign_all_asyncbitxor_assign_all / bitxor_assign_all_asyncneg_assign_all / neg_assign_all_asyncnot_assign_all / not_assign_all_asyncuse slice_ops::ops::*;
let mut x = [1, 2, 3, 4, 5, 6, 7, 8];
x.mul_assign_all(2);
assert_eq!(x, [2, 4, 6, 8, 10, 12, 14, 16]);
shift_many_left / shift_many_rightshift_left / shift_rightuse slice_ops::ops::*;
let mut register = [4, 5, 6, 7, 8, 9];
let mut io = [1, 2, 3];
register.shift_many_right(&mut io);
assert_eq!(register, [1, 2, 3, 4, 5, 6]);
assert_eq!(io, [7, 8, 9]);
spread / spread_mut#![feature(generic_const_exprs)]
use slice_ops::ops::*;
let arr = [1, 2, 3];
let slice = arr.as_slice();
let [odd, even] = slice.spread();
assert_eq!(odd, [1, 3]);
assert_eq!(even, [2]);
bit_rev_permutationdigit_rev_permutationuse slice_ops::ops::*;
let mut arr = [0b000, 0b001, 0b010, 0b011, 0b100, 0b101, 0b110, 0b111];
arr.bit_rev_permutation();
assert_eq!(arr, [0b000, 0b100, 0b010, 0b110, 0b001, 0b101, 0b011, 0b111])
grey_code_permutationuse slice_ops::ops::*;
let mut arr = [0b000, 0b001, 0b010, 0b011, 0b100, 0b101, 0b110, 0b111];
arr.as_mut_slice().grey_code_permutation();
assert_eq!(arr, [0b000, 0b001, 0b011, 0b010, 0b110, 0b111, 0b101, 0b100])
trim / trim_muttrim_front / trim_front_muttrim_back / trim_back_mutuse slice_ops::ops::*;
let arr = [0, 0, 0, 1, 2, 3, 0, 0, 0];
let trimmed = arr.trim(|&e| e == 0);
assert_eq!(trimmed, &[1, 2, 3]);