问题标签 [sortedlist]

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 投票
6 回答
15183 浏览

c# - SortedList 上是否有下界函数?

上是否有下界函数SortedList<K ,V>?该函数应返回等于或大于指定键的第一个元素。有没有其他类支持这个?

伙计们 - 请再读一遍这个问题。我不需要返回密钥(如果存在)的函数。我对没有精确键匹配的场景感兴趣。

我对 O(log n) time 感兴趣。这意味着我对 foreach 循环没有问题,而是希望有一种有效的方法来做到这一点。

我对此做了一些测试。

编译器和运行时机器都没有优化 Linq 语句,因此它们遍历所有集合元素并且速度慢 O(n)。基于 Mehrdad Afshari 的回答,这里是在 Keys 集合上以 O(log n) 工作的二进制搜索:

0 投票
5 回答
4312 浏览

c# - 如何在 IList 上执行 FindAll()? (例如,SortedList.Values)

我正在处理 C# 2.0/.NET 2.0 中的一个问题,其中我有一个 Sortedlist,并且想要搜索此 SortedList 的所有“值”(而不是“键”)以查找某个子字符串并计算出现次数.

这就是我想要做的:

当然,这不起作用,因为 mySortedList.Values 返回一个 IList,而“myValues”是一个列表。我尝试“强制转换”IList 以便 myValues 接受它,但它似乎不起作用。

当然,我可以在“foreach”循环中循环 mySortedList.Values,但我真的不想这样做。

有人有什么建议吗?

EDIT-1:好的,看起来没有本地方法可以轻松做到这一点。我以为我只是错过了一些东西,但显然我没有。所以我想我只是要对 IList 做一个“foreach”。

感谢大家的反馈!我给每个人投了 1 票,因为我认为所有的反馈都很好。再次感谢!:-)

EDIT-2:看起来 CMS 有我正在寻找的答案。唯一需要注意的是(正如 Qwertie 指出的那样),这可能会导致性能下降,因为它涉及将所有值复制到另一个列表,然后从头到尾搜索该列表。所以对于短名单,这个答案是有效的。更长的列表?好吧,这由你决定......

0 投票
4 回答
8604 浏览

vb.net - SortedList 未按键排序 - VB.NET

我需要要排序的键值对,所以我决定使用 SortedList 而不是 HashTable。

我按以下顺序将数据添加到我的 SortedList 中,这是我需要的顺序

键是字符串,值是对象列表。键表示一个时隙,该时隙由两个整数值连接并由“-”分隔。“700”作为一个字符串,最初是一个整数 0700。

例如

但是一旦将这些键值对添加到 SortedList 中,它们就会按顺序出现

不幸的是,我将时隙作为两个无法更改的整数值接收。

有没有办法强制对 SortedList 进行排序?或者这个问题是因为我存储密钥的方式?有没有更好的存储方法?

0 投票
6 回答
1837 浏览

c# - C# 数据结构问题(使用哪个集合?)

我需要实现大量 Widget 对象,每个对象都包含一个唯一的文件路径字符串(“FilePath”)。我需要能够执行以下操作:

  1. 给定文件路径,快速检索 Widget 对象
  2. 在不创建新对象的情况下更改 Widget 的文件路径(多个其他对象可能包含对单个 Widget 的引用,并且跟踪它们会影响性能)
  3. 给定一个 Widget 引用,确定它的文件路径

我首先想到的是使用文件路径作为键的通用 SortedList,但是为数千个对象复制路径会很快耗尽内存。我考虑从对象中删除路径并将其仅存储在键列表中,但这会使上述要求 3 难以实现。

我现在倾向于滚动我自己的从 List<> 派生的类,它以排序顺序添加 Widget 对象,并使用二进制搜索检索它们。要求 2 可以简单地通过从列表中删除一个对象、更改它的文件路径并将其添加回列表来完成。

但我对 C# 比较陌生,我想在这里与伟大的思想家核实一下,看看我是否遗漏了另一个明显的解决方案。

谢谢!

0 投票
4 回答
3436 浏览

c# - 可以快速返回子数组的排序时间序列数据的最佳数据结构?

我需要一个基本上是数据点列表的数据结构,其中每个数据点都有一个时间戳和一个数据值的 double[]。我希望能够检索到给定时间戳的最近点或指定时间戳范围内的所有点。

我正在使用 c#。我的想法是使用常规列表是可能的,其中“数据点”是一个包含时间戳和双 [] 字段的类。然后插入,我会使用内置的 binarysearch() 来查找插入新数据的位置,我可以再次使用它来查找范围搜索的开始/结束索引。

我首先尝试了 sortedlists,但似乎您不能仅通过键迭代索引 i=0,1,2,...,n,所以我不确定如何在没有一些复杂函数的情况下进行范围搜索.

但后来我了解到 list<> 的 insert() 是 o(n)...如果不牺牲其他地方,难道我不能做得更好吗?

或者,是否有一些不错的 linq 查询可以在一行中完成我想要的所有操作?

0 投票
7 回答
25300 浏览

hashtable - 在哈希表或排序列表中查找项目哪个更快?

在哈希表或排序列表中查找项目哪个更快?

0 投票
7 回答
107949 浏览

c# - SortedList 和 SortedDictionary 有什么区别?

SortedList<TKey,TValue>a和 a之间有什么真正的实际区别SortedDictionary<TKey,TValue>吗?在任何情况下您会专门使用一种而不是另一种吗?

0 投票
4 回答
28872 浏览

c# - .NET / C# - 将列表转换为排序列表

将 List 转换为 SortedList 的最佳方法是什么?有什么好方法可以在不循环的情况下做到这一点?使用 OrderBy() 有什么聪明的方法吗?

总结 请阅读所有答案和评论。

0 投票
4 回答
37170 浏览

c# - c#如何按其值列对排序列表进行排序

我有一个通用的排序列表“结果”,其中键 = 一些文件名,值 = 布尔值。

我想按布尔条目或值列对列表进行排序。有谁知道我该怎么做?

谢谢!

0 投票
6 回答
46671 浏览

c# - 何时使用 SortedList在 SortedDictionary 上?

这似乎是这个问题的重复,它询问“ SortedListSortedDictionary之间有什么区别?” 不幸的是,答案只不过是引用了 MSDN 文档(其中明确指出两者之间存在性能和内存使用差异),但实际上并没有回答这个问题。

事实上(所以这个问题没有得到相同的答案),根据 MSDN:

SortedList<TKey, TValue>泛型类是具有 O(log n) 检索的二叉搜索树,其中 n 是字典中元素的数量。在这方面,它类似于 SortedDictionary<TKey, TValue>泛型类。这两个类具有相似的对象模型,并且都具有 O(log n) 检索。这两个类的不同之处在于内存使用和插入和删除速度:

  • SortedList<TKey, TValue>使用的内存少于SortedDictionary<TKey, TValue>.

  • SortedDictionary<TKey, TValue>对未排序的数据具有更快的插入和删除操作,O(log n) 而不是 O(n) for SortedList<TKey, TValue>.

  • 如果列表是从排序的数据中一次性填充的,SortedList<TKey, TValue>则比 SortedDictionary<TKey, TValue>.

因此,显然这表明这SortedList<TKey, TValue>是更好的选择,除非您需要对未排序的数据进行更快的插入和删除操作。

鉴于上述信息,问题仍然存在,使用SortedDictionary<TKey, TValue>? 根据性能信息,这意味着根本没有必要拥有SortedDictionary<TKey, TValue>