Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VB.Net equivalent of Javascript's .Map function

Tags:

vb.net

Given an array of strings, say: Dim array1 As String() = {"1", "2", "3"} what is the best way to copy that array and perform an action on each element?

In other words, what is the best way to copy that array to come up with: array2 as integer() = {1, 2, 3}

For example, something similar to JavaScript's .Map function:

var numbers = [4, 9, 16, 25];

function myFunction() {
    x = document.getElementById("demo")
    x.innerHTML = numbers.map(Math.sqrt);
}
// Result: 2, 3, 4, 5

If it isn't possible in one line - as I suspect it isn't - what is your quickest alternative? Thanks!

like image 875
Rhurac Avatar asked Jul 16 '26 07:07

Rhurac


2 Answers

If you don't want to use any LINQ extension methods, but you are okay with using lambda expressions, you can still do it in one line using Array.ConvertAll:

Dim input() As String = {"1", "2", "3"}
Dim output() As Integer = Array.ConvertAll(input, Function(x) Integer.Parse(x))

However, it does beg the question: why not just use LINQ, at that point, since it's effectively the same thing:

Dim input() As String = {"1", "2", "3"}
Dim output() As Integer = input.Select(Function(x) Integer.Parse(x)).ToArray()

The classic imperative way to do this in VB, without using LINQ or lambdas, would be a for-loop:

Dim input() As String = {"1", "2", "3"}
Dim output(LBound(input) To UBound(input)) As Integer
For i As Integer = LBound(input) To UBound(input)
    output(i) = Integer.Parse(input(i))
Next
like image 106
Steven Doggart Avatar answered Jul 18 '26 05:07

Steven Doggart


I would like to add that, similar to JavaScript, .NET's map equivalent Select also supports method groups as well as lambdas.

Here's an example using a lambda:

Dim output = input.Select(Function(x) SomeMethod(x)).ToArray()

Here's an example using a method group. Since parenthesis on method invocations are optional in VB.NET, the additional AddressOf keyword is required:

Dim output = input.Select(AddressOf SomeMethod).ToArray()

For completeness, here's an example using the LINQ query syntax, which is just syntactic sugar for the first example:

Dim output = (From x In input Select SomeMethod(x)).ToArray()
like image 29
Heinzi Avatar answered Jul 18 '26 05:07

Heinzi