在C#字典中查找元组键的问题

时间:2019-07-05 01:01:45

标签: c# dictionary tuples

Dictionary<Tuple<int, int>, link_data> dic_links

我有上面的代码。我使用元组作为字典键。 我只想使用元组中两个值之一来查找值。

有什么方法可以只使用索引而不是在foreach中搜索整个词典吗?

cout << dic_links[new Tuple<int, int>(57,**).data;

3 个答案:

答案 0 :(得分:1)

否,不能仅使用部分键在具有O(1)性能的字典中进行搜索。

您的选项是搜索所有键,或者具有单独的字典以将键的每个部分映射到对象(请确保它们保持同步)。

如果您只需要按全键或一个组成部分进行搜索,并且O(log n)是合理的,则可以使用排序列表(您将无法使用单个数组按第二个组成部分进行搜索)。


有关更多想法,您可以搜索“字典范围查询”,在其中您希望找到“所有键为10到100的项”,这是同样的问题。

答案 1 :(得分:1)

不。 Dictionary设计用于使用严格的键相等性进行有效搜索。如果您不确切知道密钥,那么必须逐一枚举所有元素。

在您的情况下,元组的每个单独属性可能都有重复的值,因此您将无法使用简单的$(document).on('keyup', 'input[type=number][min],input[type=number][max]', function () { var _this = $(this); if (_this.val() === "-") return; var val = parseFloat(_this.val()); if (_this.attr("min") !== undefined && _this.attr("min") !== "") { var min = parseFloat(_this.attr('min')); if (val < min) _this.val(min); } if (_this.attr("max") !== undefined && _this.attr("max") !== "") { var max = parseFloat(_this.attr('max')); if (val > max) _this.val(max); } }); $(document).on('change', 'input[type=number][step]', function () { var _this = $(this); var val = parseFloat(_this.val()); if (_this.attr("step") !== undefined && _this.attr("step") !== "") { var step = parseFloat(_this.attr('step')); if ((val % step) != 0) _this.val(val - (val % step)); } }); 来按属性进行索引。如果数据是静态的,则可以使用Lookup<int, link_data>,如果创建索引后需要添加/删除元素,则可以使用Dictionary<int, link_data>

答案 2 :(得分:0)

您可以将字典转换为嵌套字典。

Dictionary<int, Dictionary<int, link_data>>dic_links;