【发布时间】:2017-08-09 13:57:31
【问题描述】:
更新的简洁问题
我有一个包含 DateTime 值列表的对象。这是假期列表以及一天的工作时间。
Item.cs
class Item
{
public int SourceId { get; set; }
public int DestinationId { get; set; }
public int ChannelId { get; set; }
public string Username { get; set; }
public List<DateTime> Holidays { get; set; }
}
如果不是假期,我们可以将项目列表保存在字典中,以元组作为键。
要求
会有一个项目符合条件(因为有一个默认项目来处理没有项目匹配的情况)
属性会不时改变
1) 是否可以获取此类对象的哈希码,包括 Holidays 属性。
2)如果不是字典,如何为这种搜索设计具有最佳时间复杂度的数据结构
原帖不清楚
我实现了一个以元组为键的字典,到目前为止它工作得很好。
现有的字典键
Tuple<int, int, int, string>
现有的搜索方法
var item = default(item);
_dictinary.TryGetValue(new Tuple(1,1,1,""), out item);
return item;
因为搜索参数是固定的。
然而,现在出现了一个新要求,即元组项是动态的,即搜索参数的数量是可变的。我试图通过假设始终存在最大数量的搜索参数来保持数字不变,但是当另一个日期范围类型的搜索参数成为要求时,我碰壁了。这意味着我不能将字典作为基础数据结构。
因此,我需要知道当有多个条件(例如日期范围)时,有人会考虑使用哪种数据结构来尽可能保持搜索效率。
为了完整起见,让我说新的搜索参数是一个日期范围,称为假日。即我需要匹配今天是否在该假期的日期范围内,包括其他参数
Holiday.cs
public class Holiday
{
public List<Day> Days{ get; set; }
}
其中 Day 是 DateTime 的包装,表示一年中的某一天。
总结 的组合 SourceId(int), DestinationId(int), ChannelId(int), Username(int), (IsTodayHoliday (Holiday-DateRanges)) 应该唯一地找到集合中的一项
我不能使用对象的哈希,因为搜索参数对象是具有日期范围的可变对象,并且范围不一定是连续的,至少我不知道如何获取此类对象的哈希
我完全理解匹配算法是必需的,正如我上面提到的,我肯定需要更改我的数据结构和字典不合适。我的问题非常具体到数据结构的设计以提高搜索复杂性。
【问题讨论】:
-
您能否提供一个示例,说明您尝试搜索的数据点以及搜索它们的查询类型?
-
我有一种强烈的感觉,你错过了使用字典作为搜索的主要结构。您可能需要使用
SearchParams作为对象的自定义匹配谓词的输入(而不是使用字典的按键匹配) -
提高搜索复杂度的数据结构设计您是想说效率而不是复杂度吗?
-
@Dusan 是的,效率,我的意思是时间复杂度
-
创建您想要的任何对象并使用hash 作为键。
标签: c# dictionary search