我在考虑以下问题。垂直分割一个数组,所以我们得到最小分割
我可以有一个字符串像
Col1 Col2 Col3 Col4
aa aa aa aa
aaa aaa aaaaa aaa
aaaa aaaaaaa aa a
...........................
数组其实这是CSV
文件。我应该找到一种方法将它垂直分割成一个或多个文件。分裂的条件是没有一个文件不包含超过某些字节的行。为简单起见,我们可以重写数组的长度:
Col1 Col2 Col3 Col4
2 2 2 2
3 3 5 3
4 7 2 1
...........................
而且我们说的限值是10
,即如果> 9
我们应该分开。所以如果我们分成两个文件[Col1, Col2, Col3]
和[Col4]
这将不会满足条件,因为第一行文件的第二行将包含3 + 3 + 5 > 9
,第三行包含4 + 7 + 2 > 9
。如果我们分成[Col1, Col2]
和[Col3, Col4]
这将不会满足条件,因为第一个文件将包含第三行中的4 + 7 > 9
。所以我们把它分成3个文件,如[Col1]
,[Col2, Col3]
和[Col4]
。现在每个文件是正确的,看起来像:
File1 | File2 | File3
------------------------------
Col1 | Col2 Col3 | Col4
2 | 2 2 | 2
3 | 3 5 | 3
4 | 7 2 | 1
...............................
所以应该拆分从左至右给出的最大列数尽量向左文件。问题是这个文件可能很大,我不想将它读入内存,所以我们逐行读取最初的文件,并以某种方式确定一组要分割的索引。如果这是可能的呢?我希望我能很好地描述这个问题,这样你就能理解它。
列可以交换? –
有多少列和行? –
最多2,500列,最多10,000行。将来可能会更多。列不能交换,移动等。 –