我有一个数组数组。
float[][] Test
例如
{ {433801.000f,335601.000f,5},
{433821.000f,335631.000f,5},
{433811.000f,335671.000f,5} };
如何获取此数组(或数组数组)的子集,其中值符合条件。
例如Test[i][0] > 40000
和Test[i][1] + Test[i][2] < 350000
我显然可以遍历列表。但是当阵列数量巨大时,这将非常缓慢。
我如何以矢量化方式执行此操作。
如果这会导致任何限制,我也会使用JavaME。但JavaSE解决方案也很有见地,并且希望在JavaME中工作。
答案 0 :(得分:5)
除非您存储有关数据的更多信息,否则没有迭代就无法做到。
我建议除了存储完整数据之外,对于每个新记录,您都要根据条件对其进行测试,如果确实如此,请将项目引用保存在另一个数组中(好吧,Vector
对两者都更好其中除非存储真的紧。)
然后,当您想要所有符合条件的项目时,只需查找第二个“数组”中的所有引用。这大致是一些数据库查询的优化方式。查询成本降低,但代价是插入和存储成本较高。
答案 1 :(得分:2)
我认为迭代整个阵列并测试这些条件与其他任何方式一样快。好处是它实施起来非常简单。你对阵列的期望有多大?如果,在最坏的情况下,它只有几千行,你会没事的:)。
答案 2 :(得分:1)
避免线性扫描的唯一方法是以排序的方式存储数据。使用某种树结构可能是快速查找的前进方向。这意味着不将数据存储在数组中,这可能会违反您的内存要求,但这是权衡。