问题标签 [collections]

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 投票
20 回答
108380 浏览

.net - 比较两个集合的相等性,而不考虑其中项目的顺序

我想比较两个集合(在 C# 中),但我不确定有效实现这一点的最佳方法。

我已经阅读了关于Enumerable.SequenceEqual的另一个线程,但这并不是我想要的。

就我而言,如果两个集合都包含相同的项目(无论顺序如何),它们将是相等的。

例子:

我通常做的是遍历一个集合的每个项目,看看它是否存在于另一个集合中,然后循环遍历另一个集合的每个项目,看看它是否存在于第一个集合中。(我首先比较长度)。

然而,这并不完全正确,而且它可能不是比较两个集合是否相等的最有效方法。

我能想到的一个错误的例子是:

这与我的实现相同。我应该只计算找到每个项目的次数并确保两个集合中的计数相等吗?


这些示例使用某种 C#(我们称其为伪 C#),但可以用任何您希望的语言给出答案,没关系。

注意:为了简单起见,我在示例中使用了整数,但我也希望能够使用引用类型的对象(它们不能正确地作为键,因为只比较对象的引用,而不是内容)。

0 投票
5 回答
17282 浏览

c# - 您将如何实现 IEnumerator 接口?

我有一个将对象映射到对象的类,但与字典不同,它以两种方式映射它们。我现在正在尝试实现一个IEnumerator遍历值的自定义接口。

0 投票
5 回答
4364 浏览

c# - 尝试将重复对象插入集合时抛出的正确 .NET 异常是什么?

我有一个 Asset 对象,它有一个属性 AssignedSoftware,它是一个集合。

我想确保同一软件不会多次分配给资产。在 Add 方法中,我检查软件是否已经存在,如果存在,我想抛出异常。

我应该抛出一个标准的 .NET 异常吗?还是最佳实践要求我创建自己的自定义异常?

0 投票
7 回答
23096 浏览

c# - 以只读方式返回集合

我在多线程环境中有一个对象,它维护着一组信息,例如:

我目前已return data;用 a 包裹ReaderWriterLockSlim以保护集合免受共享违规。但是,为了更加确定,我想将集合作为只读返回,以便调用代码无法对集合进行更改,只能查看已经存在的内容。这是可能吗?

0 投票
5 回答
13920 浏览

c# - Merging two Collection

I got a Function that returns a Collection<string>, and that calls itself recursively to eventually return one big Collection<string>.

Now, i just wonder what the best approach to merge the lists? Collection.CopyTo() only copies to string[], and using a foreach() loop feels like being inefficient. However, since I also want to filter out duplicates, I feel like i'll end up with a foreach that calls Contains() on the Collection.

I wonder, is there a more efficient way to have a recursive function that returns a list of strings without duplicates? I don't have to use a Collection, it can be pretty much any suitable data type.

Only exclusion, I'm bound to Visual Studio 2005 and .net 3.0, so no LINQ.

Edit: To clarify: The Function takes a user out of Active Directory, looks at the Direct Reports of the user, and then recursively looks at the direct reports of every user. So the end result is a List of all users that are in the "command chain" of a given user.Since this is executed quite often and at the moment takes 20 Seconds for some users, i'm looking for ways to improve it. Caching the result for 24 Hours is also on my list btw., but I want to see how to improve it before applying caching.

0 投票
9 回答
7152 浏览

.net - .NET 中的非泛型集合是否已过时?

换一种说法:

是否有充分的理由选择松散类型的集合而不是类型安全的集合(HashTable 与 Dictionary)?它们仍然只是为了兼容性吗?

据我了解,泛型集合不仅是类型安全的,而且它们的性能更好。


这是一篇关于该主题的综合文章:使用 C# 2.0 对数据结构进行广泛检查

0 投票
10 回答
20585 浏览

c# - 哪个 .Net 集合可以一次添加多个对象并获得通知?

正在考虑System.Collections.ObjectModel ObservableCollection<T>上课。这个很奇怪,因为

  • 它有一个添加方法,它只接受一项。没有 AddRange 或等效项。
  • Notification 事件参数有一个 NewItems 属性,它是一个IList(对象的......不是 T)

我需要将一批对象添加到集合中,并且侦听器还将该批次作为通知的一部分。我错过了什么 ObservableCollection 吗?还有其他符合我规格的课程吗?

更新:尽可能不要自己动手。我必须构建添加/删除/更改等。很多东西。


相关问:
https ://stackoverflow.com/questions/670577/observablecollection-doesnt-support-addrange-method-so-i-get-notified-for-each

0 投票
4 回答
567 浏览

java - 在 Java 中使用小型(1-10 项)实例级集合

在 Java 中创建类时,我经常发现自己创建了实例级集合,我提前知道这些集合非常小——集合中的项目少于 10 个。但我不提前知道项目的数量,所以我通常选择动态集合(ArrayList、Vector 等)。

我的一部分一直在唠叨我,对这么小的东西使用复杂的动态集合是浪费的。有没有更好的方法来实现这样的事情?还是这是常态?

请注意,我没有受到任何(明显的)性能损失或类似的影响。这只是我想知道是否没有更好的方法来做事。

0 投票
3 回答
629 浏览

java - 实现几个签名冲突的接口

最后,我尝试在 Java 中实现混合结构,如下所示:

其中 HasKey 是如下接口:

不幸的是,Set 接口的方法签名和 Java 中的 Map 接口之间存在一些冲突。我最终选择只实现 Set 接口并添加 Map 方法而不实现该接口。

你看到更好的解决方案了吗?

针对第一条评论,这是我的目标:

具有集合结构,并且能够有效地访问该集合的值的子集,对应于给定的键值。一开始我实例化了一个地图和一个集合,但我试图将这两个结构结合起来以优化性能。

0 投票
12 回答
6356 浏览

java - 检测并发修改?

在我正在处理的多线程应用程序中,我们偶尔会ConcurrentModificationExceptions在列表中看到(主要是ArrayList,有时是向量)。但在其他时候,我认为正在发生并发修改,因为迭代集合似乎缺少项目,但没有抛出异常。我知道文档ConcurrentModificationException说您不能依赖它,但是我将如何确保我不会同时修改列表?并且将每个对集合的访问包装在同步块中是防止它的唯一方法吗?

更新:是的,我知道Collections.synchronizedCollection,但它不能防止有人在您迭代集合时修改集合。我认为至少我的一些问题正在发生,当有人在我迭代它时向集合中添加了一些东西。

第二次更新 如果有人想把提到的 synchronizedCollection 和像 Jason 那样的克隆与提到的 java.util.concurrent 和 jacekfoo 和 Javamann 这样的 apache 集合框架结合起来,我可以接受一个答案。