计算机科学中的字典(或地图)是将键映射到值的数据结构,使得给定键可以有效地检索其对应的值。有关映射函数对数据集合的问题,请使用[map-function]标记;而对于地理,[地图]。
我是scala新手,仍然需要学习很多东西。但目前我有这个 json 对象: driverCarJSON = """{ “收藏”: { “列表”:[ ], “汽车”:[“宝马”,...
如何使用点和方括号表示法作为字符串键来访问嵌套字典/列表结构
假设我有一个嵌套字典,如下所示: { “一”:1, “b”:2, “c”:3, “d”:{ “e”:4, “f&
我有一个情况,我有几个非常大的字典列表和包含在其他地方构建的大量数据的字典,这些数据以非常大的 json 对象传递。我需要采取
我有一个 .xls,其中包含我毕业期间必须参加的一些科目。其中一些有建议(例如:微积分 II 需要微积分 I)及其学分。我需要创建一个流程图...
我正在尝试在 A* 算法上实现缓存路径列表。目前,缓存的路径存储在如下列表中: 只读列表 _cachedPaths = 新列表 我正在尝试在 A* 算法上实现缓存路径列表。目前,缓存的路径存储在如下列表中: readonly List<CachedPath> _cachedPaths = new List<CachedPath>(); 对此列表执行的操作是: FirstOrDefault 获取满足一定条件的元素 var cached = _cachedPaths.FirstOrDefault(p => p.From == from && p.To == target && p.Actor == self); 删除并元素 _cachedPaths.Remove(cached); 补充 _cachedPaths.Add(new CachedPath { From = from, To = target, Actor = self, Result = pb, Tick = _world.WorldTick }); 注意:类 CachedPath 的 GetHashCode 和 Equals 被 From、To 和 Actor 覆盖,因此具有这些相同属性的两个实例具有相同的哈希值和相等性。 考虑到“HashSet”中的快速查找(包含)、插入和删除都是 O(1)(如果我没记错的话),我考虑使用“HashSet”来执行这些操作。唯一的问题是 FirstOrDefault,我必须枚举整个集合才能获取它。 考虑到这个问题,我还考虑使用由 From、To 和 Actor 的哈希索引索引的字典: Dictionary<int, CachedPath> cachedPath 再次强调一下,如果我没记错的话,Dictionary 还提供了 O(1) 的插入、删除以及通过 Key 检索的功能。这让我认为字典是一个 HashSet + O(1) 元素检索能力。 我错过了什么吗? Dictionary 真的比 HashSet 更好,因为它支持更多操作吗? 提前致谢。 Dictionary并不比HashSet更好,只是不同而已。 当您想要存储无序的项目集合时,可以使用 HashSet,并且 当您想要将一组称为“键”的项目与另一个称为“值”的项目集合关联时,可以使用 Dictionary 人们可以将 HashSet 视为没有关联值的 Dictionary(事实上,HashSet 有时在幕后使用 Dictionary 来实现),但没有必要以这种方式考虑它:将两者视为完全不同的事物也很好。 在您的情况下,您可以通过按演员制作字典来提高性能,如下所示: Dictionary<ActorType,List<CachedPath>> _cachedPathsByActor 这样,您的线性搜索将快速选择基于演员的子列表,然后按目标进行线性搜索: var cached = _cachedPathsByActor[self].FirstOrDefault(p => p.From == from && p.To == target); 或者通过创建一个考虑所有三个项目的相等比较器,并使用 Dictionary 和 CachedPath 作为键和值,并将自定义 IEqualityComparer<T> 作为键比较器: class CachedPathEqualityComparer : IEqualityComparer<CachedPath> { public bool Equals(CachedPath a, CachedPath b) { return a.Actor == b.Actor && a.From == b.From && a.To == b.To; } public int GetHashCode(CachedPath p) { return 31*31*p.Actor.GetHashCode()+31*p.From.GetHashCode()+p.To.GetHashCode(); } } ... var _cachedPaths = new Dictionary<CachedPath,CachedPath>(new CachedPathEqualityComparer()); ... CachedPath cached; if (_cachedPaths.TryGetValue(self, out cached)) { ... } 但是,这种方法假设字典中最多有一个项目具有相同的 From、To 和 Actor。 哈希集在执行添加时不会抛出异常。相反,它返回一个布尔值,反映添加成功。 哈希集也不需要键值对。 我使用哈希集来保证唯一值的集合。 HashSet 似乎足以满足您需要做的事情:存储唯一路径并检查路径是否已存储并将其删除。 这是关于美学的:你的代码读起来就像是带有集合的数学证明,而不是操作字典的过程。 不要使用FirstOrDefault;只需使用 HashSet.Contains(p) 和 HashSet.Remove(p) ,其中“p”是 CachedPath 的新实例,具有您正在查找的属性。 我遇到了完全相同的问题,这就是我遇到这篇文章的原因。我的情况与您的情况类似,存储的项目需要通过多个属性有效地查找。然而,就我而言,存储的项目和用于搜索的项目并不相同;它们仅具有用作密钥的潜在相同属性组合,而其余属性则不同。 这就是为什么我需要一个字典和一个关于属性组合的自定义比较器。我需要存储的实际项目,因为它与我搜索时使用的项目不同。 但在您的情况下,如果一个缓存路径具有相同的属性,则它们与另一个缓存路径相同。这就是为什么您可以使用更简单的 HashSet。您不需要从 HashSet 中检索项目,因为您只需构造一个项目的新实例并使用它来检查哈希集是否已包含其等效项,并从哈希集中删除该等效项。
如何创建 Google::Protobuf::Map 实例 [Ruby]
我在 ruby 中有一个 protobuf 对象,它有一个映射作为一个参数。如何创建 Google::Protobuf::Map?如果我尝试输入标准哈希表,则会收到预期的映射实例错误。 --编辑...
我们如何在Python中从一个列表和一个元组制作一本字典? 添加列表和元组并制作一个以列表作为键、元组作为值的字典,就像我在代码密宗中被赋予的任务一样,我...
Android Kotlin:ModelMapper 地图不适用于自定义类
我尝试使用 ModelMapper 将 AWThoughtDTO 自定义对象映射到 AWTthought 中,但没有成功,因为它总是返回一个空对象。 AW思想DTO: 类 AWThoughtDTO( 变量 ID:整数 = 0, ...
Map.computeIfAbsent 中奇怪的 lambda 行为
我创建了以下方法,将给定的 UUID 值和给定的 Integer 添加到映射变量中。 最终Map>map = new TreeMap<>(); 私人无效添加...
我正在尝试从列表中获取一些值。但我想确保如果 key 不存在,它将返回默认值 0 而不是抛出异常。 var BusinessDays = days.Where(x => x.Y...
我创建了一个字典结构的字典,其结构是键是部门('ABC'),然后日期(01.08)是键,值是{产品名称(A),单位(0) ,收入(0)}。这个结构...
我是新来的。我想对字典中的所有值求和,但我的值都是字符串,我不知道如何将字符串转换为整数...... 如果有人可以提供帮助,我真的很感激!...
在 Julia 中破坏性地迭代字典是否安全? 这是一个例子 d = 字典() 对于键中键(d) 噗!(d,键) 结尾 重要的是keys(d)返回的是迭代器还是集合...
C++ 如何使用转发参数在 std::map 中使用 emplace
使用 std::vector 我成功地通过转发参数来使用 emplace_back,如以下代码所示: #包括 #包括 #包括 #包括 #inc...
我想在 Julia 中编写一个合并两个字典的函数。 函数合并(左::字典,右::字典)::字典 语义如下: 输入为左、右 左右都...
假设我有n本不同大小的字典,dictA,...,dictN。它们都以字符串作为键,以正数作为值。我需要的是一个 dictComb,它的键都是
我想使用一个类作为字典键并实现了哈希函数,它似乎可以工作。但是,当我有一个具有相同哈希值的类的不同实例时,它......
不确定如何表达,但我会尝试一下 我有一组像这样定义的数组,它们是 C 风格的图像。 静态 uint8_t wsymbol_0043_mostly_cloudy[] PROGMEM = { 0x00、0x00、...
给定一个字典,我想通过检查哪些键满足特定约束来获取一个新字典,它是原始字典的子集。例如,对于带有字符串的字典...