文件流允许我们迭代文件的行。当我们分割线时,例如通过逗号或空格,通常的做法是将此结果向量添加到另一个容器中。
结果可能是Vector< Vector<String> >
(或您的容器味道)。
当我使用QTableView
将此项提交给QAbstractTableModel
时,行和列会反转:外部容器实际上表示行,而内部容器表示列。
我不确定该怎么做,因为我想要呈现数据,允许一些编辑操作(编辑模型),然后将其写入可比较的文件。
我的数据大约是200,000行(人)乘以300列(值),实际上较慢从文件中读入矢量,但更快到当我以倒置方式读取矩阵时出现在QTableView
中。
将它写入另一个文件时,与正常方式相比,这次写出转置向量并不容易:
for (int iter = 0; ....; ...)
{
row = matrix[iter].join(" ")
file.write(row)
}
我错过了一些明显的东西吗?它必须以倒置的方式显示。当我将模型连接到视图时,我应该进行转置,还是应该以倒置的方式填充矩阵?
答案 0 :(得分:0)
您可能需要重新检查数据结构。从缓存一致性的角度来看,更好的做法可能就是拥有以下内容:
struct Line {
QString str;
QVector<short> splitPoints; // 2 points per each substring (begin, length)
};
struct File {
QVector<Line> lines;
}
当然,您需要Line
的全面实施,包括便利运营商等,但这会让您有所了解。从Line
返回常量字符串时,您希望使用QStringRef
来避免复制内容。