关于c#:合并两个Collection < T >

关于c#:合并两个Collection < T >

Merging two Collection<T>

我有一个返回Collection<string>的函数,该函数递归调用自身,最终返回一个大的Collection<string>

现在,我只是想知道合并列表的最佳方法是什么? Collection.CopyTo()仅复制到string [],并且使用foreach()循环感觉效率低下。但是,由于我也想过滤出重复项,所以我觉得我最终会得到一个在Collection上调用Contains()的foreach。

我想知道,有没有更有效的方法来使递归函数返回没有重复的字符串列表?我不必使用Collection,它几乎可以是任何合适的数据类型。

仅排除,我绑定到Visual Studio 2005和.net 3.0,因此没有LINQ。

编辑:进行澄清:函数将用户从Active Directory中移出,查看该用户的直接报告,然后递归查看每个用户的直接报告。因此,最终结果是给定用户"命令链"中所有用户的列表。由于这是经常执行的操作,目前对于某些用户而言需要20秒,因此我正在寻找改进方法。缓存24小时的结果也在我的列表中,但我想在应用缓存之前了解如何改进它。


如果您使用的是List <>,则可以使用.AddRange将一个列表添加到另一个列表中。

或者您可以使用yield return来动态合并列表,如下所示:

1
2
3
4
5
6
7
8
public IEnumerable<string> Combine(IEnumerable<string> col1, IEnumerable<string> col2)
{
    foreach(string item in col1)
        yield return item;

    foreach(string item in col2)
        yield return item;
}

n


您可能想看看Iesi.Collections和扩展的通用Iesi.Collections(因为第一版是在1.1中制作的,当时还没有通用名称)。

扩展的Iesi具有一个ISet类,该类的作用与HashSet完全相同:它强制执行唯一的成员,并且不允许重复。

关于Iesi的妙处是它设置了运算符,而不是用于合并集合的方法,因此您可以在联合(|),交集(


我认为HashSet<T>有很大帮助。

The HashSet< T > class provides
high performance set operations. A set
is a collection that contains no
duplicate elements, and whose elements
are in no particular order.

只需向其中添加项目,然后使用CopyTo。

更新:HashSet<T>在.Net 3.5中

也许您可以使用Dictionary<TKey, TValue>。将重复键设置为字典不会引发异常。


n


推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    wps如何合并章节

    wps如何合并章节,WPS教程,1.WPS表格如何实现单元格合并?WPS 表格在新版本中增加了“合并单元格”系列按钮,同时配有下拉菜单和快捷键。新增

    设置里程碑|设置里程碑的方法有哪些

    设置里程碑|设置里程碑的方法有哪些,,1. 设置里程碑的方法有哪些1、通过挑战风险,突破认知,从而突破自我。只有在某些特殊的时刻,比如想法和

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细