Sign in to follow this  
Followers 0
goldenix

[Solved] how to delete whole array?

10 posts in this topic

#1 ·  Posted (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 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]

Share this post


Link to post
Share on other sites



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? :mellow:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

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]

Share this post


Link to post
Share on other sites

goldenix,

It is under Dim/Global/Local/Const. :mellow:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

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 :mellow:

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

Share this post


Link to post
Share on other sites

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. :mellow:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

_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.

Share this post


Link to post
Share on other sites

#8 ·  Posted (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 by zbatev

Share this post


Link to post
Share on other sites

How about re-declaring the array again:

This is what Melba23 was referring to. I use Global/Local deceleration in my Scripts.

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_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 parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

#10 ·  Posted (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 by zbatev

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0