【发布时间】:2018-05-15 21:15:03
【问题描述】:
展示的代码用于在非常大的数据集中查找缺失的记录。假设 gA 表示正确数据集的记录数。另一个应用程序提供 gB 数据集,其记录编号应该与 gA 相同。即使丢失的记录数量很少(总共 36886 条记录中的 19 条),它也阻止了我进一步计算。整个实用程序是用 Lambda 和 LINQ 混合编写的,因此希望将其转换为看起来相同...
Dim gA As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9}
Dim gB As New List(Of Integer) From {2, 4, 5, 6, 7, 9}
Dim rA, rB As Integer
For Each recA As Integer In gA
Dim recB As Integer = gB(rA)
If recA = recB Then
rA += 1
Else
rB += 1
Console.WriteLine("{0} missing record: {1}", rB, recA)
End If
Next
' Output:
'1 missing record: 1
'2 missing record: 3
'3 missing record: 8
【问题讨论】:
-
有什么问题?
-
将以下 VB.NET 代码翻译成 Lambda/LINQ
-
如果
gB = From {8, 2, 4, 5, 6, 7, 9},输出应该是什么? -
只是需要考虑的事情...如果其余代码是用 lambdas 和 linq 编写的,但这部分不是,可能需要在更改之前考虑是否有原因。与简单的 for 循环相比,Linq 在大型数据集上的表现不如简单的 for 循环,因此如果此操作代价高昂,则可能不是故意使用 linq。也就是说,您真正需要的只是
gA.Except(gB),这将使您得到 B 中缺少的 A 中的数字 -
OP 的代码不能像
gA.Except(gB)那样做。