我有以表格形式构建的数据
+------+------+------+------+
| | Col1 | Col2 | Col3 |
+------+------+------+------+
| Row1 | 1 | 2 | 3 |
| Row2 | 5 | 5 | 6 |
| Row3 | 9 | 2 | 7 |
+------+------+------+------+
我正在寻找一种允许以下内容的数据结构:
此外,行和列将包含元数据(名称,颜色和类似的东西)。所有这些操作经常发生在我们的系统中。目前我们存储基于数据的行,并且列没有引用与它们相关的数据。这使得删除列或迭代其数据非常繁琐。
我想到的第一件事就是Guava Table
,但这不是有序的,我不确定删除整行或列是否容易,尽管清除行或列映射可能会它
由于需要添加和删除,因此阵列作为后备存储将无法正常工作。 (虽然我可以预测表的大小并为删除创建新表,但我不喜欢该解决方案,即使它可能对用户隐藏)
对于如何实现这种数据结构的任何想法,我将不胜感激。
为了澄清,我不需要一个完成这个的完成的库,但我正在寻找一个允许我创建它的数据结构。我已经知道我将把行和列元数据存储在单独的列表中,例如
答案 0 :(得分:3)
当然可以订购番石榴 <p>
<strong>Synopsis
<br />
<span style="color:#FF0000;">No special characters like <strong>'</strong> or <strong>"</strong> in synopsis!</span>
</p>
<form>
<textarea name="synopsis" id="editor1" rows="10" cols="80">
<?php echo ''.$fetch['synopsis'].'';?>
</textarea>
<script>
CKEDITOR.replace( 'editor1' );
</script>
</form>
。 ImmutableTable
提供“可靠的用户指定的迭代顺序”和(来自Builder
docs)“默认情况下,单元格添加到构建器的顺序决定了返回表格中所有视图的迭代顺序”
如果您需要Table
可变并想要TreeBasedTable
,则可以使用RowSortedTable
。
你也可以很容易地实现自己的Table
课程。使用ForwardingTable
和LinkedHashBasedTable
来存储您所需的迭代顺序,或者只需使用LinkedHashSet
作为第一个参数调用Tables.newCustomTable()
(以及{{1}的结果},如果需要的话。)
大多数LinkedHashMap
实现为所有标准方法提供O(1)或O(n)(其中n是行/列计数)实现,以及返回视图的方法(如Supplier
和Table
)由原始row()
直接支持,因此效率相同。
如果您真的担心所有可用的colum()
实施(包括Table
)太慢,您应该对此进行基准测试。它们对于所有正常使用都足够有效,并且没有证明Table
是您的瓶颈,创建自己的数据结构是premature optimization的明确实例。
答案 1 :(得分:0)
谢谢大家的帮助和想法。我得出的结论是,我将保持表的当前结构,其中包含每个都有单元格列表的行列表。虽然这使得迭代列或删除列很困难,但我们的表通常很小(<15行,<100列),我们当前实现的主要瓶颈是数据存储在字符串中而不是键入(如果经常这么做,Double.parse会非常昂贵)。虽然开发一个满足我原始问题所有要求的数据结构会非常有趣,但实际情况是我不能花那么多时间来处理这个问题。