问题标签 [data-structures]

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 回答
6206 浏览

python - 在 Python 中存储集合数据的最佳方式是什么?

我有以下形式的数据列表:

[(id\__1_, description, id\_type), (id\__2_, description, id\_type), ... , (id\__n_, description, id\_type))

数据是从属于同一组的文件中加载的。在每个组中,可能有多个相同的 id,每个来自不同的文件。我不关心重复项,所以我认为存储所有这些内容的好方法是将其放入 Set 类型。但是有一个问题。

有时对于相同的 id,描述可能会略有不同,如下所示:

IPI00110753

  • 微管蛋白 alpha-1A 链
  • 微管蛋白 alpha-1 链
  • α-微管蛋白 1
  • α-微管蛋白同种型 M-α-1

(请注意,此示例取自uniprot 蛋白质数据库。)

我不在乎描述是否不同。我不能把它们扔掉,因为我使用的蛋白质数据库可能不包含某个标识符的列表。如果发生这种情况,我希望能够向生物学家显示人类可读的描述,以便他们大致了解他们正在研究的蛋白质。

我目前正在通过使用字典类型来解决这个问题。但是我不太喜欢这个解决方案,因为它使用了大量内存(我有很多这些 ID)。这只是它们的中间列表。在将 ID 放入数据库之前,还需要进行一些额外的处理,所以我想保持我的数据结构更小。

我真的有两个问题。首先,我会为此使用 Set 类型(而不是字典类型)获得更小的内存占用,还是应该使用排序列表,每次插入列表时检查 ID 是否存在,或者是否存在我没有想到的第三个解决方案?其次,如果 Set 类型是更好的答案,我如何键入它以仅查看元组的第一个元素而不是整个元素?

感谢您阅读我的问题,
蒂姆

更新

根据我收到的一些评论,让我稍微澄清一下。我对数据结构所做的大部分工作都是插入其中。我只读了两次,一次是用附加信息注释它,一次是要插入到数据库中。然而,在我插入数据库之前,可能会有额外的注释。不幸的是,我不知道此时是否会发生这种情况。

现在我正在研究将这些数据存储在不基于哈希表(即字典)的结构中。我希望新结构在插入时相当快,但读取它可以是线性的,因为我实际上只做了两次。我试图远离哈希表以节省空间。是否有更好的结构或者哈希表是否尽可能好?

*该信息是我通过查询 uniprot 获得的 Swiss-Prot 蛋白质标识符列表。

0 投票
13 回答
166242 浏览

c# - .Net 数据结构:ArrayList、List、HashTable、Dictionary、SortedList、SortedDictionary——速度、内存以及何时使用它们?

.NET 有很多复杂的数据结构。不幸的是,其中一些非常相似,我并不总是确定什么时候使用一个,什么时候使用另一个。我的大部分 C# 和 VB 书籍都在一定程度上谈到了它们,但它们从未真正深入任何真正的细节。

Array、ArrayList、List、Hashtable、Dictionary、SortedList 和 SortedDictionary 有什么区别?

哪些是可枚举的(IList -- 可以执行“foreach”循环)?哪些使用键/值对(IDict)?

内存占用呢?插入速度?检索速度?

还有其他值得一提的数据结构吗?

我仍在寻找有关内存使用和速度的更多详细信息(Big-O 表示法)

0 投票
5 回答
4639 浏览

c# - C# 中的二维数据结构

我正在寻找可以帮助我确定使用 C# 创建二维数据结构的方法的资源。

0 投票
3 回答
2121 浏览

c# - 如何从 C# 中的 LinkedList 中删除与给定条件匹配的元素?

我有一个 LinkedList,其中 Entry 有一个名为 id 的成员。我想从 id 与搜索值匹配的列表中删除条目。最好的方法是什么?我不想使用 Remove(),因为 Entry.Equals 会比较其他成员,而我只想匹配 id。我希望做这样的事情:

编辑:有人可以为我重新打开这个问题吗?它不是重复的 - 它应该是重复的问题是关于 List 类的。List.RemoveAll 不起作用 - 这是 List 类的一部分。

0 投票
4 回答
1307 浏览

javascript - 在哪里可以找到用于将 Perl 数据结构转换为 JavaScript 的 Perl 模块?

在哪里可以找到用于将 Perl 数据结构转换为 JavaScript 的 Perl 模块?

例如,这是我的代码(梅森):

有这个模块吗?

0 投票
2 回答
150 浏览

oop - 对任务列表进行排序的最佳位置

我正在构建一个 Web 应用程序,它是一个流程管理应用程序。将向几种不同的员工类型显示要执行的任务列表,当每个人完成一项任务时,它就会转移到下一位要处理的员工。

任务层次结构是批处理 > 加载 > 装配 > 零件 > 任务。目前有 8 条规则可用于确定每种员工类型应首先处理的任务。这些规则适用于零件的大小,以及零件完成将如何影响层次结构,例如,如果 A 部分完成,那么它会完成整个批次,而 B 部分不会,因为在其批次中还有其他部分要完成。

无论如何,这就是系统如何工作的电梯间距。我想弄清楚的是一种有效、快速和可维护的方法,考虑到规则可能会改变并且可能会添加更多规则。

最初我打算让数据库(sql 2005)完成所有繁重的工作,但我担心更复杂的规则很难用数据库实现。因此,另一种方法是将任务列表提取到中间层并创建对象集合并将每个规则应用于集合。我毫不怀疑每个规则都可以单独转换为 T-SQL,但根据任务类型按多达 8 个标准排序感觉很麻烦。

我可以看到中间层方法的一个好处是我可以创建一个限制更松散的系统,其中可以更改任务流,我认为这在数据库中会更加困难。

那么大家会推荐什么呢?有没有我没有想到的第三种选择?

编辑[1] 只是为了进一步说明这一点,预计数据库不会改变我最初开发它的方式。

0 投票
5 回答
915 浏览

c++ - Windows 上最快的小型数据存储

我的应用程序跟踪大约 1000 个对象的状态。这些对象以无特定顺序读取和写入持久存储(序列化)。

现在,该应用程序使用注册表来存储每个对象的状态。这很好,因为:

  • 很简单

  • 它非常快

  • 可以读取/写入单个对象的状态,而无需读取更大的实体(例如从大型 XML 文件中提取片段)

  • 有一个不错的编辑器(RegEdit),可以轻松操作单个项目

话虽如此,我想知道是否有更好的方法。SQLite 似乎是一种可能性,但您没有与注册表相同级别的多读取器/多写入器,也没有简单的方法来编辑现有条目。

有更好的建议吗?一堆平面文件?

0 投票
7 回答
3205 浏览

.net - .NET 中通过字符串键或数字索引查找的最佳数据结构是什么?

我正在寻找最理想的数据结构(为了性能和易用性),可以通过字符串键或索引从中检索值。字典不起作用,因为您无法真正按索引检索。有任何想法吗?

0 投票
5 回答
303 浏览

c# - 具有 valueTypes 字段和装箱的类

我正在尝试使用泛型,并且正在尝试创建类似于 Dataset 类的结构。
我有以下代码

我遇到的问题是,当我添加新列时,我还需要在 HasChanges 属性和 AcceptChanges() 方法中添加它。这只是要求进行一些重构。
所以我想到的第一个解决方案是这样的:

正如您从评论中看到的那样,我们在结构克隆方面几乎没有问题。对此的简单解决方案是将 Column 更改为类,但从我的测试来看,它似乎将内存使用量增加了约 40%(因为每个对象元数据),这对我来说是不可接受的。

所以我的问题是:有没有人有任何其他想法如何创建可以在不同结构化对象/记录上工作的方法?也许 F# 社区的某个人可以建议如何用函数式语言解决这些问题,以及它如何影响性能和内存使用。

编辑:
sfg 感谢有关宏的建议。
在 Visual Studio 2008 中有一个内置的(但不为人知的)模板引擎,称为 T4。重点是将“.tt”文件添加到我的项目中并创建一个模板,该模板将搜索我的所有类,以某种方式识别记录的那些(例如通过它们实现的某些接口)并使用 HasChanges 和 AcceptChanges 生成部分类( ) 将只调用类包含的列。

一些有用的链接:
VS
博客的 T4 编辑器,包含有关 T4 博客条目的链接和教程,
以及使用 EnvDTE 读取项目文件的示例

0 投票
3 回答
1243 浏览

c# - pthread_cond_t 的 EventWaitHandle 行为

我最近看到了 EventWaitHandle 在 C# 中的强大行为,并决定在姊妹应用程序中移动一些功能来做同样的事情。唯一的问题是姊妹应用程序是用 C 编写的。

没什么大不了的,我正在使用 pthreads,它有一个 pthread_cond_t 数据类型,允许发送信号。我唯一的问题是,是否有可能在等待它之前“发出信号”?

现在我的测试说不。也就是说,如果 ThreadA 在 ThreadB 等待之前触发了一个信号,那么 ThreadB 将无限期地等待。是否有另一种我可以使用的 pthread 类型更接近 C# 中 EventWaitHandle 的功能?一个对象是有信号的,这意味着第一个等待它的线程将立即通过,并将其设置为无信号。

将 pthread_cond 包装到另一个数据结构中并不难实现这一点。但同样,这个功能是否已经在 pthread 库中可用?