We help IT Professionals succeed at work.

How to overwrte an arraylist location

cmdolcet
cmdolcet asked
on
219 Views
Last Modified: 2012-05-06
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

Comment
Watch Question

Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

Commented:
Can you simply remove it ?
        Dim arr As New ArrayList
        arr.Add(4000)
        arr.Add(0)
        arr.Add(4001)
 
        ' Removes the 0
        arr.Remove(0)

Open in new window

Author

Commented:
but I don't want to remove it i want to update it with the previous arraylist value
Mike TomlinsonHigh School Computer Science, Computer Applications, Digital Design, and Mathematics Teacher
CERTIFIED EXPERT
Top Expert 2009

Commented:
Just access it by Index:

    arr(1) = 4000 ' replace the second element with 4000
Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

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

Author

Commented:
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(intarrayindex) = pre_intarrayindex
                    Else
                        pre_intarrayindex = 0
                        pre_intarrayindex = intarrayindex
                    End If
                Next
Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

Commented:

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(intarrayindex)
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

Open in new window

Mike TomlinsonHigh School Computer Science, Computer Applications, Digital Design, and Mathematics Teacher
CERTIFIED EXPERT
Top Expert 2009

Commented:
I think you want?

        For intarrayindex As Integer = 0 To _Arraylist_1Inch.Count - 1
            If _Arraylist_1Inch(intarrayindex) = 0 Then
                _Arraylist_1Inch(intarrayindex) = pre_intarrayindex
            End If
        Next
Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

Commented:
Nice solution Idle_Mind, the only problem is that loops in all the arraylist.
But, could be not a problem :)
High School Computer Science, Computer Applications, Digital Design, and Mathematics Teacher
CERTIFIED EXPERT
Top Expert 2009
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
Mike TomlinsonHigh School Computer Science, Computer Applications, Digital Design, and Mathematics Teacher
CERTIFIED EXPERT
Top Expert 2009

Commented:
@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   =)
Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

Commented:
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 :)
Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

Commented:
Typo ... Should be:

Loved your sign ~IM :)
Mike TomlinsonHigh School Computer Science, Computer Applications, Digital Design, and Mathematics Teacher
CERTIFIED EXPERT
Top Expert 2009

Commented:
Lol...and of course, if the size of the list is small, then the milliseconds saved doesn't really matter!   =O


Jorge PaulinoIT Pro/Developer
CERTIFIED EXPERT
Top Expert 2008

Commented:
I have tested with 20000 records!
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.