Tag: 集合

检查两个列表是否有碰撞元素?

有没有办法检查一个列表是否与另一个列表发生冲突? 例如: bool hit=false; foreach(var s in list2) { if (list1.Contains(s)) { hit = true; break; } } if (!hit) {

C#合并2个集合的不同项

我正在寻找一种高效的方法来将第二个ICollection的不同项添加到现有的ICollection中。 我正在使用.NET 4。

你如何获得队列中的第一个和最后一个项目?

假设我有一个滚动的值集合,我指定集合的​​大小,每当添加新值时,超出此指定大小的任何旧值都将被删除。 显然(我已经测试了这个)用于此行为的最佳集合类型是队列: myQueue.Enqueue(newValue) If myQueue.Count > specifiedSize Then myQueue.Dequeue() 但是,如果我想计算队列中第一个和最后一个项目之间的差异怎么办? 显然我无法通过索引访问项目。 但是,从队列切换到实现IList的东西看起来有点矫枉过正,编写类似Queue的新类也是如此。 现在我有: Dim firstValue As Integer = myQueue.Peek() Dim lastValue As Integer = myQueue.ToArray()(myQueue.Count – 1) Dim diff As Integer = lastValue – firstValue 对ToArray()这种呼吁困扰着我,但是一个更好的选择并没有找到我。 有什么建议?

合并两个Collection

我得到一个返回Collection的函数,它以递归方式调用自身,最终返回一个大的Collection 。 现在,我只是想知道合并列表的最佳方法是什么? Collection.CopyTo()只复制到string [],并且使用foreach()循环感觉效率低下。 但是,因为我也想过滤掉重复项,所以我觉得我最终会得到一个在Collection上调用Contains()的foreach。 我想知道,有一种更有效的方法来获得一个递归函数,它返回一个没有重复的字符串列表吗? 我不必使用Collection ,它可以是几乎任何合适的数据类型。 只有排除,我绑定到Visual Studio 2005和.net 3.0,所以没有LINQ。 编辑:澄清:该function将用户从Active Directory中取出,查看用户的直接报告,然后递归查看每个用户的直接报告。 因此,最终结果是给定用户的“命令链”中的所有用户的列表。由于这是经常执行的,并且目前对于某些用户需要20秒,我正在寻找改进它的方法。 将结果缓存24小时也是我的列表btw。但我想看看如何在应用缓存之前改进它。

OOC:ToList()和.NET中的List 之间有什么区别?

OOC:出于好奇 所以,作为一个小练习,为了学习,我决定检查我是否能够实现一个非常基本的递归函数,它将返回一个List ,但有以下限制: 1-结果应该由函数本身返回(而不是作为参数传递给void函数)。 2 – 在函数体中声明没有本地“命名”变量。 我想出了下面的解决方案(顺便说一句:这可以以任何方式改进吗?) 在这样做的过程中,我了解到ToList()与ToList() List (见下面的例子) – 那里的任何人都可以解释幕后发生的事情以及两者之间的区别是什么? 谢谢! PS – 我正在使用4.0版(如果它很重要)。 编辑:运行时错误是Unable to cast object of type ‘d__71’1[System.Int32]’ to type ‘System.Collections.Generic.List’1[System.Int32]’ public static List SomeIntegers(int min, int max) { //assume max >= min for simplicity if (min == max) return new List() { min }; // runtime error //return […]

迭代强类型genericsList 的最佳方法是什么?

在C#.NET和VB.NET中迭代强类型genericsList的最佳方法是什么?

.NET中是否有任何阻止空条目的集合?

我专门考虑一个符合一套合同的集合,但我认为这个问题适用于任何类型。 .NET框架中是否存在阻止空条目的集合? 我想要的具体行为是这样的: var set = new HashSet(); bool added = set.Add(null); Console.WriteLine(added); // prints “False” 这不是内置HashSet 。 是否存在任何具有此(或类似)行为的集合,或者我最好自己滚动? 如果是后者,最好的方法是什么? 我应该直接从HashSetinheritance还是只包装它? 编辑:要清楚,这只是空闲的想知道。 主要是因为我想不出有任何理由我想让null进入一组对象。 我对此没有任何特别需要。

为什么要使用Stack 而不是List ?

System.Collections.Generic中的List执行Stack所做的一切,以及更多 – 它们基于相同的底层数据结构。 在什么条件下选择Stack是否正确?

如何使用下拉列表选项创建Public String属性?

是否可以将字符串List附加到String属性,以便用户可以从“属性”窗口中选择其中一个字符串? 我应该实现ICollection或类似的东西?

并发下的队列为不同类型提供不同的结果

我刚刚开始了解一些新的.NET并发集合,如ConcurrentDictionary和ConcurrentQueue,我正在运行一些测试,看看当我与Queue并行编写时会发生什么。 所以我跑了这个: private static void ParallelWriteToQueue(Queue queue) { Stopwatch sw = Stopwatch.StartNew(); Parallel.For(1,1000001,(i) => queue.Enqueue(i)); sw.Stop(); Console.WriteLine(“Regular int Queue – ” + queue.Count + ” time” + sw.ElapsedMilliseconds); } 而且我认为我得到了下一个例外: Source array was not long enough. Check srcIndex and length, and the array’s lower bounds. 因此,此队列无法像预测的那样处理并发队列。 但是 ,当我将队列的类型更改为字符串时,没有exception,结果写了类似的东西 Regular string Queue – 663209 time117 这意味着只有大约663k被排队。 […]