ResizeIntArray - Utility
SKSE member of: Utility Script
Resizes an already existing array of Int values to the specified length. (This function requires SKSE)
Be careful when using this function. It is possible to create arrays longer than 128 elements, and size is treated as an unsigned 32-bit integer. Do not exceed a length of 2^31. SKSE's DLL can handle a max length of 2^32 however, Papyrus cannot. Negative numbers will produce extremely large values, which can cause major issues.
SyntaxEdit
int[] Function ResizeIntArray(int[] source, int size, int fill = 0) global native
ParametersEdit
- source: an existing array of int values.
- size: new size of the array.
- fill: a value to fill empty elements of the array with, if the array being resized is longer than the source array.
Return ValueEdit
An Int array of size length. Element values will match those provided by the source array. If new size (array.length) exceeds size of source array, new elements will will have the value of the fill (if specified) or zero if not.
ExamplesEdit
; let's make array length equal to available perk points, and fill all elements with 9
; ...this should really be using the "create" function, not "resize"
int[] pointsArray
pointsArray = Utility.ResizeIntArray(pointsArray, Game.GetPerkPoints(), 9)
; Let's resize an existing array, someArray, expanding it by one element. The fill value (in this case, not specified so the default of zero) will be used for new elements (in this case, the last one) and all other element values will remain the same as they were before being resized.
someArray = Utility.ResizeIntArray(someArray, someArray.Length + 1)
; Let's resize an existing array, someArray, by making it one element shorter. The removed element, would be the last one in the array. The data in all other elements should be unchanged.
; NOTE 1: this is not "safe" code, it could theoretically try to Resize the array to zero length (if it's currently 1) which Resize will not allow, resulting in an error in the papyrus log. Use "Create" versions if you need to shrink an existing array to zero elements.
; NOTE 2: The autofill value is meaningless and ignored when shrinking an array.
someArray = Utility.ResizeIntArray(someArray, someArray.Length - 1)
NotesEdit
- No need to actually create an array with new, declaring an array variable is enough. However, be sure to "Create" or "Resize" the array before trying to read/set any element values in it, or you will get an error for trying to access an uninitialized array.