Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I've wrote a generic function to add an item to an Array 2D

This is what I have:

Private Sub Add_Item_Array_2D(ByRef Array_2D As String(,), _
                              ByVal Items As String())

    Dim tmp_array(Array_2D.GetUpperBound(0) + 1, Array_2D.GetUpperBound(1)) As String

    For x As Integer = 0 To Array_2D.GetUpperBound(0)
        tmp_array(x, 0) = Array_2D(x, 0)
        tmp_array(x, 1) = Array_2D(x, 1)
    Next

    For x As Integer = 0 To Items.Count - 1
        tmp_array(tmp_array.GetUpperBound(0), x) = Items(x)
    Next

    Array_2D = tmp_array

End Sub

The code works, but I want to know if can be improved using Array.Resize method of LINQ extensions.

This is an usage example:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.shown

    ' Create Array 2D (2,2)
    Dim MyArray As String(,) = _
    {{"Item 0,0", "Item 0,1"}, {"Item 1,0", "Item 1,1"}, {"Item 2,0", "Item 2,1"}}

    ' Add Item
    Add_Item_Array_2D(MyArray, {"Item 3,0", "Item 3,1"})

    ' Loop over the Array 2D
    For x As Integer = 0 To MyArray.GetUpperBound(0)
        MsgBox(String.Format("Array 2D {1},0: {2}{0}Array 2D {1},1: {3}", Environment.NewLine, _
                            x, MyArray(x, 0), MyArray(x, 1)))
    Next

End Sub
share|improve this question

2 Answers 2

up vote 1 down vote accepted

Couple nitpicks:

  • Try to stick to PascalCasing for method names. Using _ underscores not only makes your method names look rather messy, the underscore is conventionally used for event handler methods (like Form1_Load, i.e. object_event).
  • Consistency is king. Your two snippets aren't consistent as far as parameter naming goes: you're using PascalCasing in your top example, and camelCasing in the bottom one. Pick one, stick to it.
  • The term generic has a specific meaning in the .net world. That's not a generic function. General-purpose, maybe?

A quick Google search didn't yield much interesting results in VB.net, but this StackOverflow answer has a decent C# version of the code - and it just happens to be an actual generic method:

Most methods in the array class only work with one-dimensional arrays, so you have to perform the copy manually:

T[,] ResizeArray<T>(T[,] original, int rows, int cols)
{
    var newArray = new T[rows,cols];
    int minRows = Math.Min(rows, original.GetLength(0));
    int minCols = Math.Min(cols, original.GetLength(1));
    for(int i = 0; i < minRows; i++)
        for(int j = 0; j < minCols; j++)
           newArray[i, j] = original[i, j];
    return newArray;
}

Now I know this isn't VB, but an array is an array regardless of the language, so I strongly recommend you take a look at the SO answer, as it goes in much more details than I'd care to quote over here.

Bottom line: You cannot use Array.Resize() with multidimensional arrays.

share|improve this answer

Bottom line: You cannot use Array.Resize() with multidimensional arrays.

On the other hand a a 2d list eliminates the resizing altogether.List(Of List(Of String)) adding items is as easy as

Private Sub Add_Item_Array_2D(ByRef Array_2D As List(Of List(Of String)), _
                              ByVal Items As String())
    Array_2D.Add(New List(Of String)(Items))

End Sub
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.