- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一本 C# 字典。假设键是可比较的,我如何找到大于给定 k 的最小键(与字典键的类型相同)?但是,我想使用像 SortedDictionary 这样的集合来高效地执行此操作。
显然,如果不是高效执行的问题,可以从任何字典开始,提取其键,然后使用具有合适谓词的 First 方法。但这将在线性时间(以键的数量)执行,如果一个人有一组排序的键,那么应该能够在对数时间内找到键。
谢谢。
最佳答案
SortedList<TKey, TValue>
类(class)工具IDictionary<TKey, TValue>
并且有一个 IndexOfKey
方法;我想这就是你想要的:
// I'm just going to pretend your keys are ints
var collection = new SortedList<int, string>();
// populate collection with whatever
int k = GetK(); // or whatever
int kIndex = collection.IndexOfKey(k);
int? smallestKeyGreaterThanK = null;
if (collection.Count > kIndex + 1)
smallestKeyGreaterThanK = collection.Keys[kIndex + 1];
This method performs a binary search; therefore, this method is an O(log n) operation.
编辑:如果您不能确定字典是否包含您正在寻找的键(您只想要下一个最大的键),仍然有一种方法可以利用现有的二进制文件.NET 的搜索方法供您使用。你说你正在寻找一个“高效”的解决方案;如果您的意思是您的时间(以及代码行),则以下内容符合该标准。另一方面,如果你的意思是内存使用或性能,它可能并不理想。无论如何:
List<int> keysList = new List<int>(collection.Keys);
int kIndex = keysList.BinarySearch(k);
现在,BinarySearch
会给你你要找的东西,但如果 key 不在那里,那就有点古怪了。返回值,来自MSDN documentation , 如下:
The zero-based index of item in the sorted
List<T>
, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of Count.
这意味着您需要添加另一行:
kIndex = kIndex >= 0 ? kIndex : ~kIndex;
关于c# - 如何找到集合中的下一个最大键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971917/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!