goldenix Posted March 2, 2010 Share Posted March 2, 2010 (edited) so I have an array with over million entries. It stores temp values. I want to delete it & then create it again so I can insert new values. I could use _ArrayDelete() but this will take forever. how can I do it fast? #include <Array.au3> Global $avArray[1] For $i = 1 to 5 _make_array() _do_stuff_hire() _ArrayDelete($avArray, 'del Whole array') Next Func _make_array() Dim $avArray[1] ; 1 Row &at the beginning For $n = 1 To 10 _ArrayAdd($avArray, $n) Next EndFunc Edited March 2, 2010 by goldenix My Projects:[list][*]Guide - ytube step by step tut for reading memory with autoitscript + samples[*]WinHide - tool to show hide windows, Skinned With GDI+[*]Virtualdub batch job list maker - Batch Process all files with same settings[*]Exp calc - Exp calculator for online games[*]Automated Microsoft SQL Server 2000 installer[*]Image sorter helper for IrfanView - 1 click opens img & move ur mouse to close opened img[/list] Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 2, 2010 Moderators Share Posted March 2, 2010 goldenix,From that much under-read Help file:To erase an array (maybe because it is a large global array and you want to free the memory), simply assign a single value to it: $array = 0. This will free the array and convert it back to the single value of 0.Declaring the same variable name again will erase all array values and reset the dimensions to the new definition.Simple, eh? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
goldenix Posted March 2, 2010 Author Share Posted March 2, 2010 This is not what I see in the help file under _arrayDelete(). I guess my help file is outdated. thanx for into. solution: #include <Array.au3> Global $avArray[1] For $i = 1 to 5 _make_array($i) _ArrayDisplay($avArray, "$avArray BEFORE _ArrayAdd()") Next Func _make_array($n) $avArray = 0 dim $avArray[1] For $n = 1 To 10 _ArrayAdd($avArray, $n) Next EndFunc My Projects:[list][*]Guide - ytube step by step tut for reading memory with autoitscript + samples[*]WinHide - tool to show hide windows, Skinned With GDI+[*]Virtualdub batch job list maker - Batch Process all files with same settings[*]Exp calc - Exp calculator for online games[*]Automated Microsoft SQL Server 2000 installer[*]Image sorter helper for IrfanView - 1 click opens img & move ur mouse to close opened img[/list] Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 2, 2010 Moderators Share Posted March 2, 2010 goldenix,It is under Dim/Global/Local/Const. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
PartyPooper Posted March 3, 2010 Share Posted March 3, 2010 If you're going to delete the array and then recreate it (and it will have a million entries), I wouldn't be using _ArrayAdd($avArray, $n) unless you have 64 years to spare Better off declaring the array with a million entries then using a For/Next loop to fill it eg. Func _make_array() Dim $avArray[1000001] ; max dimension + 1 (for element 0) $avArray[0] = 1000000 ; set element 0 to ubound -1 For $n = 1 To 1000000 $avArray[$n] = $n ; fill your array Next EndFunc Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 3, 2010 Moderators Share Posted March 3, 2010 goldenix,If you do not know how many elements your array will have when you start, then here is a little trick to help.The main reason the _Array* function are so slow is that they nearly all call ReDim at some stage, which takes an age to run on big arrays. By using a trick like this, you limit the number of times you need to call ReDim and so speed up the process quite a lot. You also save on memory by not having to declare your array with a million elements to start with - it just increases in size when needed:#include <Array.au3> ; Declare the array with just one element Global $aArray[1] = [0] ; Start the loop For $i = 1 To 10 $aArray[0] += 1 ; Double array size if too small (fewer ReDim needed) If UBound($aArray) <= $aArray[0] Then ReDim $aArray[UBound($aArray) * 2] $aArray[$aArray[0]] = $i Next ; Here is the array at the end of the loop _ArrayDisplay($aArray) ; Now get rid of any unused elements ReDim $aArray[$aArray[0] + 1] ; And here is the final result _ArrayDisplay($aArray)Obviously if you know that you will have a very big array, you can declare the array with a reasonable size to begin with. You could also use an independent counter if you wanted a 0-based array, but you would then have to change the If logic slightly.I hope you find this useful. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Hawkwing Posted March 3, 2010 Share Posted March 3, 2010 _Arraydelete just deletes a single row in an array. The Wheel of Time turns, and Ages come and pass, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth comes again. Link to comment Share on other sites More sharing options...
zbatev Posted July 29, 2011 Share Posted July 29, 2011 (edited) I want to bring this topic back up. How about re-declaring the array again: Dim the_array[5] ;an empty array ;lets fill it the_array[0] = 1 the_array[1] = 2 the_array[2] = 3 the_array[3] = 4 the_array[4] = 5 ;lets clear the array Dim the_array[5] although we can make a loop to clear the array but what about the solution above, does it violate something? Edited July 29, 2011 by zbatev Link to comment Share on other sites More sharing options...
guinness Posted July 29, 2011 Share Posted July 29, 2011 How about re-declaring the array again:This is what Melba23 was referring to. I use Global/Local deceleration in my Scripts. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
zbatev Posted July 29, 2011 Share Posted July 29, 2011 (edited) This is what Melba23 was referring to. I use Global/Local deceleration in my Scripts. Ofcourse, why haven't I seen that line! So we have the same solution then. Edited July 29, 2011 by zbatev Link to comment Share on other sites More sharing options...
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