问题标签 [multikey]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
883 浏览

java - 快速原始int多键映射?

对于我正在进行的项目,我尝试在大型数据集上创建多维数据透视。我有所有我想用作ints 的键,所以基本上,我想返回一组

( int1, int2, int3, .. intN ) -> (Aggregate1, Aggregate2, ... , AggregateM)

我不能使用 N 维数组,因为它可能会变得很大并且可能会很稀疏。我看过 Trove,但他们没有多键地图。Apache commons 有一个多键映射,但那是用于Objects; 这可能会起作用,但似乎不那么有趣,因为ints 将自动装箱,Integers反之亦然。

有谁知道原始的多键映射实现?(映射到对象?)

或者,有没有人有很好的提示,也许有更好的方法来解决我的问题?

[编辑] 插入时间不太有趣,我需要查找性能,因为地图将大量用于查找值。

[edit2] 感谢所有的答案。我的实现选择是一个包含 int[] 的自定义类,它是不可变的,因此hashcode可以根据构建时间计算。

0 投票
1 回答
37 浏览

mongodb - Mongodb - 查询多键索引文档

我的问题是关于 MongoDB 在查询 MultiKey 文档时的操作方式。

假设我有这些文件: { a: 1, b: 2, c: ['x','y','z'] }, { a:3, b: null, c: ['x','z'] }

我的查询是这样的: db.<collection>.find({ b: null, c: 'x'})

我的索引是: db.<collection>.ensureIndex({ c: 1 })

我的问题是:对于上面的查询(要求cAND b),MongoDB 如何调用查询?它是否“看到”我有一个索引,或者它是否试图只为两个ANDc寻找一个索引?cb

0 投票
2 回答
3319 浏览

c# - 如何使用三个键创建和填充嵌套字典

我有一个独特的双精度对应于三个字符串的变化。我想填充字典或其他东西,以便我可以调用类似dict[key1][key2][key3]的东西并获取值。

我已经尝试了很多东西,比如

这给了我语法错误和错误,例如“错误 4 命名空间不能直接包含字段或方法等成员”

这给了我类似“错误 1 ​​只能使用数组初始化表达式来分配给数组类型。尝试使用新表达式”之类的错误。

这给了我语法错误和错误,例如“类、结构或接口成员声明中的错误 2 无效标记“k1””

我该怎么办?提前致谢。

![在此处输入图像描述][1]

在此处输入图像描述

编辑:尝试琼斯的代码:

0 投票
1 回答
232 浏览

arrays - 子文档数组中的mongodb多键索引范围

作为背景,文档中与我的问题最相关的页面是this page on multikey index bounds and index intersection

我遇到了一个问题,似乎 mongo 没有正确组合子文档数组中字段的 $elemMatch 查询中的索引边界。

文档似乎并没有说我的特定用例不应该工作,并且有很多例子非常接近我正在做的事情。从技术角度来看,我想不出任何不应该工作的理由。我是否错过了什么,或者有人可以向我解释为什么会这样吗?

我从一组这样的文档开始:

我有这样的索引:

当数据数组中只有一个子文档时,如下所示:

对数据的 $elemMatch 查询工作得很好:

但是,当我在数组中添加任何包含多个子文档的文档时data,如下所示:

查询需要更长的数量级(在非平凡的测试用例中),并且解释将边界从正确更改为[2, 2][-Infinity, 2]并且isMultiKey标志标记为true

它仍在使用正确的 btree 索引并获得正确的结果,但这个问题是在大型数据集上可用和不可用之间的区别。

我知道我正在使用的查询也相当于:

但我这样做是为了简单起见 - 在使用任何 $gt $gte $lt $lte 指定任何边界时会观察到相同的行为,因为索引边界在索引中设置不正确(或者在我看来)。

作为参考,当我执行上述查询时,我实际上得到了我期望的索引范围,所以它不像 mongo 不能使用多个子文档的数组发出满足我想要的计划的查询:

......再说一遍 - 我错过了什么吗?我做错了吗?有解决办法吗?这是错误还是已知问题?

我在分片复制集群中使用 mongodb v2.6.5。

0 投票
2 回答
91 浏览

java - Java:具有doubleKey类型的映射,如何制作正确的hashCode()?

我有一个 MultiKey 对象作为 Map 的键。

Key 由 Name (String) 和 ID (int) 组成。

必须完成以下合同:如果两个密钥的名称相等或两个密钥的 id 相同,则密钥必须相等。

我如何必须实现 hashCode() 函数才能不违反该合同?甚至可能吗?

实现equals很容易......我只是说:

但这行不通,因为 hashMap 只使用 hashCode() 并不关心 equals()...

例子:

0 投票
2 回答
302 浏览

java - 使用 Multikey(1,2,3) 在 Map 中存储条目。现在只有 (1) 。我可以检索多键中具有 (1) 的所有条目吗?

我已经使用带有 3 个参数的 Multikey 将值插入到 Map 中。现在我想检索在其 Multikey 中具有特定键的所有条目 - 我不知道其他 2 ..

现在只有 valueA ,我需要检索value

如果需要澄清,请询问,我会详细说明而不是投票结束..谢谢:)

..

0 投票
0 回答
452 浏览

java - Commons MultiKeyMap 与嵌套的 HashMap

我必须将 Object 与键相关联,例如 --> 。我正在考虑使用Commons MultiKeyMap或嵌套 HashMap(例如Map<K1,Map<K2,Map<K3,O1>>>)。

问题:我想知道哪种替代方案产生的内存开销最小。

注意:我并不是特别关心 put 和 get 的速度。

0 投票
2 回答
434 浏览

java - MongoDB不使用多键索引

我有一个 MongoDB 版本 3.0.3 集合,其中包含具有 2 个字段的文档:

  • 数字长 id
  • 包含 60 个数字双精度数的数组。

我在数组上建立了一个多键索引,并通过该getIndexInfo()方法确认该索引存在并且是多键。但是,当我查询数组中 2 个特定字段范围的交集时,尽管集合中有 1,000,000 个文档,但 Mongo 不使用此索引。我可以从explain()方法的输出中看到这一点。更奇怪的是,当我指定使用带有 a 的索引时hint,Mongo 会遍历所有 1,000,000 个文档和 60,000,000 个索引条目,我在explain().

我正在使用以下代码构建查询:

有什么想法吗?

在此先感谢您的帮助。

回复解释输出的请求:

在不指定提示的情况下,解释输出如下:

指定要与以下代码一起使用的索引时:

collection.find(q_and).hint("array_1").explain();

解释输出如下:

0 投票
2 回答
1419 浏览

java - 从多个 Enum 类型为 Map 创建唯一键

我有一个要求,多个枚举需要在 ie 中找到一个值Map<Key,Value>(枚举的组合将返回一个唯一值)。我认为有很多选择,比如有一个包装对象说 Key,它将充当一个 Key。此外,如果键限制为两个(不确定),我们可以使用 Guava Table。

想要检查以下方法,其中两个枚举将映射到唯一的计算值,需要理解建议 -
i)如果这种方法很好?
ii) 如果是,它是否可扩展?即是否可以很容易地使其通用以支持'n'枚举,如toKey(Enum ...enums)

下面是两个枚举的片段 -

谢谢!

0 投票
1 回答
1762 浏览

c# - 多键哈希或字典,作为输出的值列表

我是 C# 新手,需要一个包含多个键的通用列表。

我有三个参数来创建我的数据键。对于每条记录(每三个键),我都有一组值。

我需要一个通用列表,其中列表中每个节点的值是我的键的值,每个节点的值指向一个包含与该键相关的值的列表。

以下是我正在寻找的数据和数据结构的示例:

我正在考虑拥有一个包含多个键的哈希表和指向一个链接列表对象的值。或者用这三个键创建一个字典,然后再次返回一个指向链接列表头部的指针。

如果有人能告诉我如何在 C# 中做到这一点,我将不胜感激。