Share via


Is there Swap function in VB.Net?

Question

Monday, April 28, 2014 10:43 AM

Dear Friends,

I was reading about "Bubble Sort" and related articles. 

In one of that I found "Swap" function in C++ in a sample code. 

Just want to know is there a Swap function in VB.Net? I couldn't find any suggestion when I type Swap in VB 2010.

If so any reason for it only available in VC++ and Not in VC# or in VB.Net ?

Thanks

Kind Regards

VKSBK

A Real Novice Programmer !

All replies (11)

Monday, April 28, 2014 11:03 AM ✅Answered

Hi, you can create a Swap funciton, please see below:

    Public Sub Swap(Of T)(ByRef d1 As T, ByRef d2 As T)
        Dim d = d2
        d2 = d1
        d1 = d
    End Sub

and below code show you how to use it:

        Dim i1 As Integer = 3
        Dim i2 As Integer = 4
        Swap(Of Integer)(i1, i2) 'swap i1 and i2, i1 will be 4, i2 will be 3

        Dim s1 As String = "3"
        Dim s2 As String = "4"
        Swap(Of String)(s1, s2) 'swap s1 and s2, s1 will be "4", s2 will be "3""

Monday, April 28, 2014 11:07 AM ✅Answered

It's my impression that functions are written by programmers. So if you want a function to perform in VB the same way it would in C++ then you would need to write it to do so I would guess. If it's possible as C++ can do things VB can not do.

Below are some conversions of a C++ swap function using a C++ to VB converter.

'C++ TO VB CONVERTER TODO TASK: The original C++ template specifier was replaced with a VB generic specifier, which may not produce the same behavior:
'ORIGINAL LINE: template <class T>
Private Sub swap(Of T)(ByRef a As T, ByRef b As T)
  Dim c As New T(a)
  a = b
  b = c
End Sub
'C++ TO VB CONVERTER TODO TASK: The original C++ template specifier was replaced with a VB generic specifier, which may not produce the same behavior:
'ORIGINAL LINE: template <class T>
Private Sub swap(Of T)(ByRef a As T, ByRef b As T)
  Dim c As New T(std.move(a))
  a = std.move(b)
  b = std.move(c)
End Sub
'C++ TO VB CONVERTER TODO TASK: The original C++ template specifier was replaced with a VB generic specifier, which may not produce the same behavior:
'ORIGINAL LINE: template <class T, UInteger N>
Private Sub swap<T, UInteger N>(ByVal a() As T, ByVal b() As T)
  For i As UInteger = 0 To N - 1
      swap(a(i), b(i))
  Next i
End Sub
'C++ TO VB CONVERTER TODO TASK: The original C++ template specifier was replaced with a VB generic specifier, which may not produce the same behavior:
'ORIGINAL LINE: template< class T >
Private Sub MySwap(Of T)(ByRef a As T, ByRef b As T)
   Dim c As New T(a)
   a = b
   b = c
End Sub

Generics in the .NET Framework

La vida loca


Tuesday, April 29, 2014 1:39 AM ✅Answered

There is actually a SWAP keyword in QuickBasic, which was never carried over to Visual Basic.  Instead, you would write a swap routine, consisting of 3 lines of code and making use of a temporary variable.  It can be used with either strings or numbers.  This problem is frequently presented to students beginning a programming class. 

        Dim strA, strB, strTemp As String
        Dim intA, intB, intTemp As Integer
        strA = "apple"
        strB = "banana"
        intA = 5
        intB = 8
        MessageBox.Show("B is: " & strB & " " & intB, "A is: " & strA & " " & intA)
        strTemp = strA      'swap strings
        strA = strB
        strB = strTemp
        intTemp = intA      'swap numbers
        intA = intB
        intB = intTemp
        MessageBox.Show("B is now: " & strB & " " & intB, "A is now: " & strA & " " & intA)

Solitaire


Wednesday, April 30, 2014 12:30 AM ✅Answered

I'd would create the following extension method.

Public Module Exts

  <System.Runtime.CompilerServices.Extension()>
  Sub SwapWith (Of T )(ByRef thisObj     As T,
                       ByRef withThisObj As T)
    Dim tempObj = thisObj
    thisObj = withThisObj
    withThisObj = tempObj
  End Sub

End Module

This then permit the following style of coding.

Dim a = 1
Dim b = 2
a.SwapWith(b)

Dim s0 = "Banana"
Dim s1 = "Apple"
s0.SwapWith(s1)

Monday, April 28, 2014 5:05 PM

If you are read about other program language then you should know for what they are made.

Somebody who is writing drivers will always tell that Intel Assembler or C are the best for that on a Windows OS.

Somebody who is creating HTML pages will always tell that JavaScript is the best program languages

Somebody who has  to create administrative applications will always tell that managed code languages (VB, C#, Java) are the best for that.

However, You can create with VB a bubble sort. Moreover, you can create things like your own multiplier function and not use the *,

If it is wise? No, the given methods are almost forever better. 

 

Success
Cor


Tuesday, April 29, 2014 11:48 AM

Dear Friends ..

Thanks for explaining me.. and showing me the Code for "Swap".

Kind Regards

VKSBK

A Real Novice Programmer !


Tuesday, April 29, 2014 12:41 PM

Two unrelated but related things. 

VKSBK please mark the response that best answered  your question as THE answer to close the question.

MrMonkeyBoy, where on earth did you find a C++ to VB converter?

Renee

"MODERN PROGRAMMING is deficient in elementary ways BECAUSE of problems INTRODUCED by MODERN PROGRAMMING." Me


Tuesday, April 29, 2014 6:00 PM

Two unrelated but related things. 

VKSBK please mark the response that best answered  your question as THE answer to close the question.

MrMonkeyBoy, where on earth did you find a C++ to VB converter?

Renee

"MODERN PROGRAMMING is deficient in elementary ways BECAUSE of problems INTRODUCED by MODERN PROGRAMMING." Me

At Tangible but I used their free demo converter(s) which can only do up to 100 lines at a time.

However it will sometimes ask you for header files so that it can convert code. And I tried converting some C++ code of less than 100 lines but once it had all the header file locations it would not convert the code because it was somehow over 100 lines. Which leads me to believe that something in the header files becomes inclusive in the 100 lines to be converted.

La vida loca


Wednesday, April 30, 2014 3:32 AM

That figures...but such a converter is nice!!!

Renee

"MODERN PROGRAMMING is deficient in elementary ways BECAUSE of problems INTRODUCED by MODERN PROGRAMMING." Me


Tuesday, February 13, 2018 1:37 AM

There is actually a SWAP keyword in QuickBasic, which was never carried over to Visual Basic.  Instead, you would write a swap routine, consisting of 3 lines of code and making use of a temporary variable.  It can be used with either strings or numbers.  This problem is frequently presented to students beginning a programming class. 

        Dim strA, strB, strTemp As String
        Dim intA, intB, intTemp As Integer
        strA = "apple"
        strB = "banana"
        intA = 5
        intB = 8
        MessageBox.Show("B is: " & strB & " " & intB, "A is: " & strA & " " & intA)
        strTemp = strA      'swap strings
        strA = strB
        strB = strTemp
        intTemp = intA      'swap numbers
        intA = intB
        intB = intTemp
        MessageBox.Show("B is now: " & strB & " " & intB, "A is now: " & strA & " " & intA)

Solitaire

A number of posters have all given the obvious solution - copying one of the values to a temporary variable and then reassigning the values to the appropriate variables. This method is fine as long as you're just swapping around integers. However, if you start swapping large strings, objects, file records or database records, you'll find that this approach bogs down quickly as the size of the object increases. 

You brought up the SWAP keyword from QuickBASIC (also present as far back as GW-BASIC and other variants of MBASIC). The SWAP keyword offered some major performance benefits over the method described here, and it wasn't just because it was machine code - it used a slightly different algorithm. Instead of swapping the values among the variables, it swapped the pointers to the variables. This meant that no matter how large the string, object or record was, SWAP was just moving around integers of one type or another (depending on the system in use).

The benefits are obvious. All other things being equal, moving around smaller amounts of data can always be accomplished more quickly than moving around large chunks of data. Also, this method is scalable - the efficiency never changes no matter how large the objects get. The method described here by the other posters is not scalable and suffers greatly as the size of the object increases.


Tuesday, February 13, 2018 9:50 AM

Yea in the forums persons give often replies on a part of a question which they are interesting in. 

The question was about a bubble sort and the OP told he had seen a "swap" function. 

However, for the bubble sort is an interface in .Net and nobody told that, but found "swap" more interesting.

https://msdn.microsoft.com/en-us/library/system.collections.icomparer(v=vs.110).aspx

That is how it often goes in forums. 

And then an own built method is marked as answer. 

Success Cor