QB64_GJ_LIB ARRay Library - grymmjack - 08-21-2023
Hi.
I've added some handy stuff to my library for dealing with arrays:
https://github.com/grymmjack/QB64_GJ_LIB/tree/main/ARR
What is in the library? Read the README.md, but:
TYPES SUPPORTED:- _BYTE
- _UNSIGNED _BYTE
- INTEGER
- _UNSIGNED INTEGER
- _INTEGER64
- _UNSIGNED _INTEGER64
- LONG
- _UNSIGNED LONG
- SINGLE
- DOUBLE
- _FLOAT
- STRING
Every numeric type contains the following SUBs/FUNCTIONs e.g. ARR_INT.slice for the slice SUB for INTEGER type.
SUBS AND FUNCTIONS FOR NUMERIC TYPES:
Code: (Select All) .slice Slice an array from source to destination starting at index and count slices
.push Push a element onto the end of the array
.pop Pop a element off the end of the array
.shift Pop a element off the beginning of the array
.unshift Push a element on the beginning of the array
.copy Copy an array
.join Return array contents as comma delimited string
.new Create new array using comma delimited string
.longest Return the longest element of an array
.shortest Return the shortest element of an array
.math Do math on every element of an array
.min Return minimum element of an array
.max Return maximum element of an array
.first Return 1st element of an array
.last Return last element of an array
.nth Return every nth element of an array
.in Determine if a value exists in an array
.find Find a value in an array and return it's index
.count Return the number of elements in an array
.size Return the size in bytes of all elements in an array
.reverse Reverse the index of elements in an array
.random Return a random element from the array
.sum Return the sum of all elements in an array
.avg Return the average of all elements in an array
.shuffle Randomize the indexes of all elements in an array
.unique Return unique elements in an array
.gt Return elements greater than (>) value in an array
.gte Return elements greater than or equal (>=) value in an array
.lt Return elements less than (<>=) value in an array
.lte Return elements less than or equal (<>=) value in an array
.replace Replace elements in array with replacement value
.insert Insert element in an array at index
.remove Remove element in an array at index
.odd Return odd numbered indexed elements in an array
.even Return even numbered indexed elements in an array
.mod Return evenly divisible by n numbered indexed elements in an array
.between Return elements between a start and end index in an array
.sort Sort elements of an array in ascending order
.rsort Sort elements of an array in desscending order
SUBS AND FUNCTIONS FOR STRING TYPE:
Code: (Select All) .slice Slice an array from source to destination starting at index and count slices
.push Push a element onto the end of the array
.pop Pop a element off the end of the array
.shift Pop a element off the beginning of the array
.unshift Push a element on the beginning of the array
.copy Copy an array
.join Return array contents as comma delimited string
.new Create new array using comma delimited string
.longest Return the longest element of an array
.shortest Return the shortest element of an array
.first Return 1st element of an array
.last Return last element of an array
.nth Return every nth element of an array
.in Determine if a value exists in an array
.find Find a value in an array and return it's index
.count Return the number of elements in an array
.size Return the size in bytes of all elements in an array
.reverse Reverse the index of elements in an array
.random Return a random element from the array
.shuffle Randomize the indexes of all elements in an array
.unique Return unique elements in an array
.replace Replace elements in array with replacement value
.insert Insert element in an array at index
.remove Remove element in an array at index
.odd Return odd numbered indexed elements in an array
.even Return even numbered indexed elements in an array
.mod Return evenly divisible by n numbered indexed elements in an array
.between Return elements between a start and end index in an array
.sort Sort elements of an array in ascending order
.rsort Sort elements of an array in desscending order
RE: QB64_GJ_LIB ARRay Library - grymmjack - 08-21-2023
You may be wondering why did I make this? I am sick of writing the same code over and over again, and thought a higher level library would keep me from going crazy.
All of these things are built into a lot of other languages I use; python, php, javascript.
So...
Instead of:
Code: (Select All)
DIM AS LONG ub, lb, i, n
lb& = LBOUND(source_arr$) : ub& = UBOUND(source_arr$)
IF start_idx% < lb& OR start_idx% + count% > ub& THEN EXIT SUB ' out of range
IF ub& - lb& < count% THEN EXIT SUB ' too many and not enough
REDIM dest_arr(0 TO ABS(count%)) AS STRING
IF SGN(count%) = -1 THEN
IF ((start_idx% - 1) - ABS(count%)) < 0 THEN EXIT SUB ' out of range
n& = 0
FOR i& = (start_idx% - 1) TO ((start_idx% - 1) - ABS(count%)) STEP -1
dest_arr$(n&) = source_arr$(i&)
n& = n& + 1
NEXT i&
ELSE
IF ((start_idx% + 1) + ABS(count%)) > (ub& - lb&) THEN EXIT SUB ' out of range
n& = 0
FOR i& = start_idx% + 1 TO ((start_idx% + 1) + count%) STEP 1
dest_arr$(n&) = source_arr$(i&)
n& = n& + 1
NEXT i&
END IF
I can:
Code: (Select All)
CALL ARR_STR.slice(s1$(), s2$(), 1, 3)
etc.
RE: QB64_GJ_LIB ARRay Library - a740g - 08-21-2023
This is good stuff. Thanks, GJ!
RE: QB64_GJ_LIB ARRay Library - mnrvovrfc - 08-21-2023
Thank you for this. It will come in handy somewhere.
For my own use, though, I would change the names of a couple of "methods". Like "unshift" is not really a name I prefer for what it does. Also "asort" and "dsort" instead of "sort" and "rsort" although always have to type in one extra character. But that's just me.
For someone used to programming in Lua, and/or has a few Gawk scripts, the string "methods" called "join", "new" and "in" will make using arrays in BASIC less clunky.
|