给定一个字符串数组,比如说: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
如果在一行中不可能 - 我怀疑它不是 - 你最快的选择是什么?谢谢!
答案 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