在VB.NET中使用大数组

我想从Excel中提取大量的数据,操纵它,并把它放回去。 我发现最好的办法是将数据从一个Excel Range中提取到一个大数组中,然后更改数组中的内容并将其写回Excel范围。

我正在使用VB.NET 2008/2010重写应用程序,并希望利用任何新function。

目前我必须遍历数组的内容来查找具有特定值的元素; sorting大的数组也很麻烦。 我正在寻找使用新function,包括LINQ来操纵我的数组中的数据。

有没有人有最简单的方法过滤/查询,sorting等数据大数组中的任何build议。 还有什么是数组大小的合理限制?

〜非常感谢

如果你想要任何性能,你必须坚持将数据提取到数组中,操作数组,然后将数据写回到范围中。 性能优势是显着的。 我已经testing过,速度是上百倍。

我做我所有的数组操作与自定义函数。 我不相信LINQ可以比较我的自定义函数的速度。 LINQ带来的是灵活性,可读性和可维护性。 如果你devise自定义的数组操作函数与LINQ的原则,那么你应该能够利用LINQ而不放弃性能。 例如,我有一个Median数组函数。 我将它转换为接受一个双精度序列的Median扩展函数,然后在数组上使用LINQ调用Median函数。

<Extension()> Public Function Median(ByVal source As IEnumerable(Of Double)) As Double 

如在;

 Dim m = Aggregate v In arrValues2D Into Median(CDbl(v)) 

虽然你有一个多方面的问题,我已经select回答关于使用LINQ处理数组的部分…

编辑 – 对二维数组,VB.NET的LINQ

System.Array(从所有数组派生的地方)支持.AsQueryable()的扩展方法,这意味着你可以直接使用LINQ处理二维数组,如下所示:

 Option Infer On Option Strict Off Public Class DataProcessor 'something like this came from Excel, maybe a Range Dim arrValues2D(,) As String = { _ {"1", "2", "3"}, _ {"100", "99", "98"}, _ {"2", "3", "4"} _ } Private Sub FindLargeNumbers() 'LINQ against 2D array elements Dim query = From v In arrValues2D Where (Int32.Parse(v) > 50 And Int32.Parse(v) < 101) Select CStr(v) For Each thing As String In query 'do stuff Console.Write(thing + ",") Next End Sub End Class 

原来的想法

(从上面的解决scheme几乎不推荐)

你可以在Visual Basic中实现IEnumerable(Of T)和IEnumerator(Of T)来“平化”你的二维数组(有效地返回一个数值,就像它是一维数组一样),并用这些数值使用LINQ进行操作。

根据数组元素的数据types,为了回写它们,可能需要将每个值包含在某个元素中,以便可以引用原始元素而不是其值的副本。

这只是一个通用的计划,允许您使用LINQ和“新function”来处理您已经从Excel中获得的大型高效二维数组。

我出于好奇,检查了这个, 我不认为LINQ是要走的路。 我假设你正在读命名的范围到“矩形”的对象数组。 如果是这样的话,坏消息是,一个矩形数组是不可枚举和不可查询的,这意味着你不能对它执行一个LINQ查询。 详细信息请参阅以下讨论:
用LINQ查询二维数组我纠正了。 Thx到jdk和AMissico抽出时间来解释!