Enigma Posted July 30, 2012 Posted July 30, 2012 I did a search and no one has done this before (according to search that is). Thought I'd post. expandcollapse popup#include <Array.au3> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;BEGIN DOC ; ;-Calling Sequence: ; ; _ArrayUnshift() ; ;-Description: ; ; Push a new entry onto the front of an array. ; ;-Inputs: ; ; $a_Array = The array to modify. ; $a_Value = The value to push onto the array. ; ;-Outputs: ; ; $a_Array is modified. ; ;-Revisions: ; ; Name Company Date ; --------------------------------------------------------------------------- ; Mark Manning Simulacron I Mon 07/30/2012 1:38:04.67 ; Original Program. ; ; ;END DOC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; func _ArrayUnshift( ByRef $a_Array, $a_Value ) local $ret = ubound( $a_Array ); if( $ret > 0 )then _ArrayReverse( $a_Array ); _ArrayAdd( $a_Array, $a_Value ); _ArrayReverse( $a_Array ); return true; else return false; endif endfunc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;BEGIN DOC ; ;-Calling Sequence: ; ; _ArrayShift() ; ;-Description: ; ; Pop the first entry off of an array. ; ;-Inputs: ; ; $a_Array = The array that is modified. ; $a_Value = The variable to hold the popped off value. ; ;-Outputs: ; ; $a_Array is modified by this function. ; $a_Value is modified to the popped off value. ; ;-Revisions: ; ; Name Company Date ; --------------------------------------------------------------------------- ; Mark Manning Simulacron I Mon 07/30/2012 1:38:28.57 ; Original Program. ; ; ;END DOC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; func _ArrayShift( ByRef $a_Array, ByRef $a_Value ) local $ret = ubound( $a_Array ); if( $ret > 0 )then _ArrayReverse( $a_Array ); $a_Value = _ArrayPop( $a_Array ); _ArrayReverse( $a_Array ); return true; else return false; endif endfunc ; ; tests ; dim $i, $a_Value; dim $ary[10]; consolewrite( "Original Array" & @crlf ); for $i=0 to 9 $ary[$i] = $i; consolewrite( "Ary[" & $i & "] = " & $i & @crlf ); next _ArrayUnshift( $ary, 11 ); consolewrite( "------------------------------------------------------------------" &@crlf ); consolewrite( @crlf & "_ArrayUnshift test" & @crlf ); consolewrite( "There are " & ubound($ary) & " entries in the array." & @crlf ); for $i=0 to ubound($ary)-1 consolewrite( "Ary[" & $i & "] = " & $ary[$i] & @crlf ); next _ArrayShift( $ary, $a_Value ); consolewrite( "------------------------------------------------------------------" &@crlf ); consolewrite( @crlf & "_ArrayShift test" & @crlf ); consolewrite( "There are " & ubound($ary) & " entries in the array." & @crlf ); for $i=0 to ubound($ary)-1 consolewrite( "Ary[" & $i & "] = " & $ary[$i] & @crlf ); next Nothing fancy. Just a simple unshift and shift function. If the person who maintains the Array.au3 UDF wants to include these - be my guest. :-) The best way to run the test is through the AutoIt Debugger since it captures the console output and displays it automatically. You should see: Original Array Ary[0] = 0 Ary[1] = 1 Ary[2] = 2 Ary[3] = 3 Ary[4] = 4 Ary[5] = 5 Ary[6] = 6 Ary[7] = 7 Ary[8] = 8 Ary[9] = 9 ------------------------------------------------------------------ _ArrayUnshift test There are 11 entries in the array. Ary[0] = 11 Ary[1] = 0 Ary[2] = 1 Ary[3] = 2 Ary[4] = 3 Ary[5] = 4 Ary[6] = 5 Ary[7] = 6 Ary[8] = 7 Ary[9] = 8 Ary[10] = 9 ------------------------------------------------------------------ _ArrayShift test There are 10 entries in the array. Ary[0] = 0 Ary[1] = 1 Ary[2] = 2 Ary[3] = 3 Ary[4] = 4 Ary[5] = 5 Ary[6] = 6 Ary[7] = 7 Ary[8] = 8 Ary[9] = 9 I just checked the PHP website about array_shift and array_unshift and an interesting thing is - if _ArrayAdd() were modified a bit so it did one or more entries based upon whether or not the incoming information was an array or not (see the UBound() function) then this _ArrayUnshift() would work exactly like the PHP function. Later!
funkey Posted July 30, 2012 Posted July 30, 2012 This is just something like _ArrayDelete() and _ArrayInsert(), or did I miss something? Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning.
Enigma Posted July 30, 2012 Author Posted July 30, 2012 (edited) Wow! Thought I was seeing double there when I saw your avatar! Still freaking me out a bit. My mind wants to put those two eyes and mouths together. :-P Anyway - yes and no! :-) _ArrayInsert() does do what _ArrayUnshift() does except _ArrayUnshift is more restricted. _ArrayDelete() does do what _ArrayShift() does - but - _ArrayDelete just deletes the entry. _ArrayShift() returns the entry. But _ArrayShift() could probably be modified to get the value and return it before using _ArrayDelete(). Or if the person who works on the Array.au3 code wanted to modify the _ArrayDelete() function to return the value of whatever it is deleting - then these two functions would not be really needed. I'm just used to using the PHP function calls and didn't see the other ones. For some reason I took _ArrayDelete() to mean to delete the entire array and _ArrayInsert() to insert an entirely new array. What I get for not actually reading the function information. My bad. :-) Edited July 30, 2012 by Enigma
czardas Posted July 30, 2012 Posted July 30, 2012 (edited) I don't get why you introduce the value 11 with _ArrayUnshift. I would expect -1.which comes before zero. In AutoIt it is quite common to exclude the first element from the count, so Ary[0] would be 10. The function Ubound gives the total number of elements which in this case is 11. Although it's not really needed, I think it's a good idea anyway. Edited July 30, 2012 by czardas operator64 ArrayWorkshop
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now