首页 / 知识

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

2023-04-14 22:49:00

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


合并函数递归调用列表

最新内容

相关内容

猜你喜欢