【问题标题】:Organizing large Data in lists - Structure?在列表中组织大数据 - 结构?
【发布时间】:2016-03-25 04:18:43
【问题描述】:

我正在处理每组大约 180 000 个条目的跟踪数据 (x,y,z)。 套数不固定,22-30左右。

所以在最坏的情况下,我必须处理 550 万个条目。

现在,集合的数量是固定的,所以我为每个集合使用了一个列表。

public class TrackingCoords
{
    public int id,
        m,
        n;
    public decimal x,
        y,
        z,
        s;
    public string timekey;

}

public static class Data {
  public static List<TrackingCoords> lstcoords1 = new List<TrackingCoords>();
...
}

在不降低性能的情况下,您将如何组织动态数量的集合?数据可以用某种嵌套的List表示吗?

【问题讨论】:

  • 使用properties。您在谈论什么样的性能下降?搜索?插入?
  • 你能给我一个带有属性的ecample吗?搜索列表时性能下降。理想情况下,我需要每 0.04 秒(每秒 25 帧)从每个列表中找到一个条目
  • 如何调用 HashSet 的显式成员? hashset["myList1"].x ?
  • this。我不建议使用HashSet,它只是检查重复项。要搜索部分数据匹配,您需要单独散列每个数据。如果你想通过 id 快速搜索,那么Dictionary&lt;id, TrackingCoords&gt; 就可以了(注意id 作为数据成员和键出现两次)。对于多个搜索,您可以使用嵌套字典,例如Dictionary&lt;x, Dictionary&lt;y, Dictionary&lt;z, TrackingCoords&gt;&gt;&gt;(不确定它是否是一个好的结构,但它非常快,除非您可以将xyz 组合成一个键,否则会更快)。

标签: c# list data-structures bigdata


【解决方案1】:

在列表中,搜索的时间复杂度是O(n)。使用向量会更好,它可以使用二分搜索所以时间复杂度是O(logn)。我认为最好的选择是使用HashSet(System.Collections .Generic.HashSet)。您可以在https://msdn.microsoft.com/zh-cn/library/bb359438.aspx中查看更多信息

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 2015-12-16
    • 1970-01-01
    • 2012-09-14
    • 2018-06-12
    • 1970-01-01
    • 2021-06-21
    • 2013-02-25
    • 1970-01-01
    相关资源
    最近更新 更多