cmdolcet
asked on
How to overwrte an arraylist location
How can I overwrite an arraylist location?
Example
4000
0
4001
I need to overwrite the value 0 which in in my arraylist with the value 4000
Example
4000
0
4001
I need to overwrite the value 0 which in in my arraylist with the value 4000
ASKER
but I don't want to remove it i want to update it with the previous arraylist value
Just access it by Index:
arr(1) = 4000 ' replace the second element with 4000
arr(1) = 4000 ' replace the second element with 4000
Then follow the Idle_Mind suggestion ... I thought you wanted to delete the wrong entry.
If you don't know the index of the 0 (zero) you can use:
arr(arr.IndexOf(0)) = New Value
If you don't know the index of the 0 (zero) you can use:
arr(arr.IndexOf(0)) = New Value
ASKER
I keep getting a break error after the second loop through
I have _Arraylist_1Inch which has 24 spot in the arraylist. Every 2 index position I have written a 0 integer value what this loop should do is loop through the _Arraylist_1Inch and replace the 0 value with the goodpre_intarrayindex value
However its breaking
For Each intarrayindex In _Arraylist_1Inch
If intarrayindex = 0 Then
_Arraylist_1Inch(intarrayi ndex) = pre_intarrayindex
Else
pre_intarrayindex = 0
pre_intarrayindex = intarrayindex
End If
Next
I have _Arraylist_1Inch which has 24 spot in the arraylist. Every 2 index position I have written a 0 integer value what this loop should do is loop through the _Arraylist_1Inch and replace the 0 value with the goodpre_intarrayindex value
However its breaking
For Each intarrayindex In _Arraylist_1Inch
If intarrayindex = 0 Then
_Arraylist_1Inch(intarrayi
Else
pre_intarrayindex = 0
pre_intarrayindex = intarrayindex
End If
Next
intarrayindex gives you the value in the array and you're trying to use as the index of the array _Arraylist_1In in here
_Arraylist_1Inch(intarrayi
I don't know what you want to replace with but you can do something like this (and change the 123 with your value)
Dim pos As Integer
While True
pos = _Arraylist_1Inch.IndexOf(0)
If pos = -1 Then Exit While
_Arraylist_1Inch(pos) = 123
End While
I think you want?
For intarrayindex As Integer = 0 To _Arraylist_1Inch.Count - 1
If _Arraylist_1Inch(intarrayi ndex) = 0 Then
_Arraylist_1Inch(intarrayi ndex) = pre_intarrayindex
End If
Next
For intarrayindex As Integer = 0 To _Arraylist_1Inch.Count - 1
If _Arraylist_1Inch(intarrayi
_Arraylist_1Inch(intarrayi
End If
Next
Nice solution Idle_Mind, the only problem is that loops in all the arraylist.
But, could be not a problem :)
But, could be not a problem :)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
@jpaulino: With regard to this part of your comment:
"...the only problem is that loops in all the arraylist."
I do hope you realize that your code is ALSO visiting all slots in the ArrayList. Internally, the IndexOf() method is doing exactly what I have done: loop thru iteratively, inorder, until it finds a match.
In fact, your algorithm is potentially ALOT worse because EACH call to IndexOf() is starting from the BEGINNING of the ArrayList and looking for a match. So you will be iterating over some nodes multiple times! In fact, if the whole thing was full of zeroes then you would be doing multiple passes with a total of (1 + 2 + 3 + 4 + ... + n) checks instead of a just 1 pass with n checks. =\
You would need to use the IndexOf() overload that accepts a "starting position" to overcome this:
Dim pos As Integer, startIndex = 0
While True
pos = _Arraylist_1Inch.IndexOf(0 , startIndex)
If pos = -1 Then Exit While
_Arraylist_1Inch(pos) = 123
startIndex = pos + 1
End While
~IM =)
"...the only problem is that loops in all the arraylist."
I do hope you realize that your code is ALSO visiting all slots in the ArrayList. Internally, the IndexOf() method is doing exactly what I have done: loop thru iteratively, inorder, until it finds a match.
In fact, your algorithm is potentially ALOT worse because EACH call to IndexOf() is starting from the BEGINNING of the ArrayList and looking for a match. So you will be iterating over some nodes multiple times! In fact, if the whole thing was full of zeroes then you would be doing multiple passes with a total of (1 + 2 + 3 + 4 + ... + n) checks instead of a just 1 pass with n checks. =\
You would need to use the IndexOf() overload that accepts a "starting position" to overcome this:
Dim pos As Integer, startIndex = 0
While True
pos = _Arraylist_1Inch.IndexOf(0
If pos = -1 Then Exit While
_Arraylist_1Inch(pos) = 123
startIndex = pos + 1
End While
~IM =)
Strange I have made a few tests and the time from your method and my (including you change) is very close. Sometimes my runs fasts, sometimes your code runs faster.
But that the startIndex it's needed or else it will increase ALLOT the cycle time
Loved you sign ~IM :)
But that the startIndex it's needed or else it will increase ALLOT the cycle time
Loved you sign ~IM :)
Typo ... Should be:
Loved your sign ~IM :)
Loved your sign ~IM :)
Lol...and of course, if the size of the list is small, then the milliseconds saved doesn't really matter! =O
I have tested with 20000 records!
Open in new window