关于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


推荐阅读

    linux查看函数命令?

    linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,lin

    linux合并命令怎么用?

    linux合并命令怎么用?,地址,文件,位置,工作,电脑,代码,系统,命令,文档,内容,L

    linux使用命令的方法?

    linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,

    linux合并保存命令行?

    linux合并保存命令行?,文件,地址,代码,工作,命令,两个,内容,目录,方法,文件

    调用函数命令linux?

    调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎

    linux磁盘列表命令?

    linux磁盘列表命令?,情况,管理,系统,单位,信息,数据,命令,磁盘,服务,时间,lin

    linux文件夹合并命令?

    linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数

    使用linux命令合并?

    使用linux命令合并?,文件,代码,工作,命令,内容,两个,目录,方法,麻烦事,发现,l

    linux命令筛选列表?

    linux命令筛选列表?,工具,状态,位置,工作,预期,命令,名称,标准,数据,系统,在L

    linux的长列表命令?

    linux的长列表命令?,工作,系统,信息,命令,数据,目录,电脑,软件,时间,设备,Lin

    linux分区合并命令行?

    linux分区合并命令行?,系统,管理,地址,电脑,名字,工具,数据,工作,分区,地方,

    合并文件的linux命令?

    合并文件的linux命令?,文件,代码,位置,系统,命令,内容,两个,文件夹,链接,方

    linux查询函数命令?

    linux查询函数命令?,系统,信息,名称,标准,函数,百度,代码,名字,最新,实时,Lin

    linux目录列表命令?

    linux目录列表命令?,系统,信息,标准,工作,命令,地址,时间,数据,名称,目录,lin

    linux合并命令是什么?

    linux合并命令是什么?,文件,代码,位置,系统,命令,两个,内容,文件夹,链接,功

    linux命令输入方法?

    linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,lin