【发布时间】:2013-11-20 09:12:17
【问题描述】:
我有点怀疑要为我们的数据使用哪个集合。
域是这样的(示例):
对于每个超市,我们会在每次任何客户在收银台付款时将新商品添加到带有时间戳和总金额的集合中。
我们目前这样做:
我们有一个字典集合,键 = UniqueSupermarketID,值是一个列表
每次客户付款时,我们只需将新商品添加到特定超市的收藏中即可。
我们需要从这个字典中提取数据:
对于指定超市,获取时间戳等于“某个时间戳”的最新收银对象
我们目前这样做:
supermarketDictionary["supermarket_01"]
.OrderByDescending(i => t.TimeStamp)
.FirstOrDefault(i => i.TimeStamp == 'some timestamp')
这显然很快就开始表现得像废话 - 所以我试图找出将数据存储在哪个集合中。
我正在考虑使用普通字典来保存“超市 id 收银机列表”关系,并使用 SortedDictionary 作为时间戳/用作键的金额。
这是正确的方法吗?我当然需要在时间戳上正确实现 IComparable 以使其正常工作。
2014-01-03 更新:
当前列表中有大约 700 万行。我们系统中列表的用途已确定如下:
_states
.OrderBy(x => x.TimeStamp)
.FirstOrDefault(x => x.WtgId == wtgId && x.IsAvailable && x.TimeStamp >= timeStamp);
_states
.Where(x => x.WtgId == wtgId && x.IsAvailable && x.TimeStamp >= timeStamp && x.TimeStamp <= endDateTime)
.OrderBy(x => x.TimeStamp).ToList();
_states.Remove(state);
if (!_states.Contains(message))
_states.Add(message);
谢谢,
/杰斯珀 丹麦哥本哈根
【问题讨论】:
-
如果您使用大量数据,请使用数据库。这是唯一可扩展且合理的方式,然后只加载您需要的数据。
-
您的数据实际存储在哪里?在数据库中?如果有,是什么样的?
-
我假设你背后有一个数据库。因此,让数据库为您完成这项工作。
-
@dev Hedgehog:我怀疑他们背后有数据库。否则他们不会使用字典来保存客户付款,而是直接将其添加到数据库中。要么没有数据库,要么设计不好;)
-
另外,为什么要排序然后遍历集合以寻找特定的时间戳?为什么不直接查找时间戳而不进行排序?
标签: c# collections dictionary