假设我正在从文件中读取表,但原则上没有定义列集(它们在文件的第一行中定义)。我正在考虑从文件中读取对象列表。第一行包含标题,在以下行中每行都有对象值。每个对象可能是一个结构,但在这种情况下,我将不得不在执行时间中定义结构字段(列名)。
如何处理此问题?
我正在使用Qt。我们欢迎聪明的方法(如上所述)。
例如,表名:
FirstName LastName
sdasdc bdfgdg
drtggw nhnfgh
wrew rtyhrt
答案 0 :(得分:1)
您可以将数据放入QMap<QString, QVariant>
(QVariant
行为,就像最常见的Qt数据类型的联合一样)。因此,您可以轻松命名结构的每个字段,并按名称(而非索引)访问数据。
您也可以使用QList<QVariant>
。这听起来有点简单,但在这种情况下,您将使用索引从此“结构”获取值(因此代码将不那么清楚),因此我建议您使用QMap
。
<强>更新强>
因此,QMap<QString, QVariant>
或QList<QVariant>
是列表中的项目。由于您需要列出此类商品,因此您将使用QList<QMap<QString, QVariant>>
或QList<QList<QVariant>>
。
让我们比较一下这些选项:
如果您的列表非常小(例如在您的示例中 - 只有三个项目),则可以使用QList<QMap<QString, QVariant>>
。在这种情况下,每列的每个标题将有三个副本。但是很容易获得有关任何项目的任何信息。
如果您需要处理非常大的列表,使用QList<QList<QVariant>>
会更有效。在这种情况下,您将列的标题放在列表的第一个元素中,将带有数据的行放入此列表的下一个项目中。它更有效(你花费更少的内存),但处理起来有点复杂。