c# - 将空格分隔的数字文件读入数组的快速有效方法?

标签 c# parsing text arrays

我需要一种快速有效的方法来将包含数字的空格分隔文件读取到数组中。文件格式如下:

4 6
1 2 3 4 5 6
2 5 4 3 21111 101
3 5 6234 1 2 3
4 2 33434 4 5 6

第一行是数组的维度[行列]。以下几行包含数组数据。

数据也可以在没有任何换行符的情况下格式化:

4 6
1 2 3 4 5 6 2 5 4 3 21111 101 3 5 6234 1 2 3 4 2 33434 4 5 6

我可以读取第一行并使用行值和列值初始化一个数组。然后我需要用数据值填充数组。我的第一个想法是逐行读取文件并使用拆分功能。但是列出的第二种格式让我停顿了一下,因为整个数组数据会一次全部加载到内存中。其中一些文件在 100 MB 以内。第二种方法是分块读取文件,然后逐个解析它们。也许其他人有更好的方法?

最佳答案

数据加载后您的使用模式是什么?您通常需要接触每个数组元素还是只进行稀疏/随机访问?

如果您需要接触大多数数组元素,将其加载到内存中可能是最好的方法。

如果您只需要访问某些元素,您可能希望将需要的元素延迟加载到内存中。一种策略是确定文件使用两种布局中的哪一种(带/不带换行符),并创建一种算法根据需要直接从磁盘加载特定元素(查找给定的文件偏移量、读取和解析)。为了有效地重新访问同一个元素,将元素保存在一个由偏移量索引的字典中是有意义的。在转到文件中查找特定值之前先检查字典。

在一般原则下,除非您的测试证明您需要走更复杂的路线 (avoid premature optimization),否则我会采用简单的路线。

关于c# - 将空格分隔的数字文件读入数组的快速有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952868/

相关文章:

css - 以数字形式应用 CSS 字体粗细?

php - Mysql - 存储和检索多行文本的最佳方式(性能和可扩展性)

c# - 在 XNA 中处理调整窗口大小和 RenderTargets

c++ - "simple"C++ 解析器

java - JSON 数组解析,其中键值对中缺少键

javascript - 如何将字符串转换为时间?

c# - 多列 TreeView

c# - 如何保护我的程序集不被其他人使用?

c# - 使用 IEnumerable 源进行分区

php - 给定大写名称转换为 Proper Case,处理 "O' Hara"、 "McDonald" "van der Sloot"等