VB.Net相当于Javascript的.Map功能

时间:2016-12-21 15:38:51

标签: vb.net

给定一个字符串数组,比如说:Dim array1 As String() = {"1", "2", "3"}复制该数组并对每个元素执行操作的最佳方法是什么?

换句话说,复制该数组的最佳方法是:array2 as integer() = {1, 2, 3}

例如,与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

如果在一行中不可能 - 我怀疑它不是 - 你最快的选择是什么?谢谢!

3 个答案:

答案 0 :(得分:6)

如果你不想使用任何LINQ扩展方法,但你可以使用lambda表达式,你仍然可以使用Array.ConvertAll在一行中完成:

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

然而,它确实提出了一个问题:为什么不在这一点上使用LINQ,因为它实际上是一样的:

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

答案 1 :(得分:3)

我想补充一点,与JavaScript类似,.NET的 map 等效Select也支持方法组以及lambdas。

以下是使用lambda的示例:

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

以下是使用方法组的示例。由于方法调用中的括号在VB.NET中是可选的,因此需要额外的AddressOf关键字:

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

为了完整性,这是一个使用LINQ查询语法的示例,这只是第一个示例的语法糖:

Dim output = (From x In input Select SomeMethod(x)).ToArray()

答案 2 :(得分:1)

如果您不想使用LINQ,这是一种经典的方式,一个循环:

Dim numbers = {4, 9, 16, 25}
For i As Int32 = 0 To numbers.Length - 1
    numbers(i) = CInt(Math.Sqrt(numbers(i)))
Next