2

我正在使用 C# 2.0 应用程序,因此 linq/lambda 答案在这里将无济于事。

基本上我面临的情况是我需要yield return一个对象,但前提是它的属性是唯一的(分组依据)例如,..say 我有一个用户集合,我想要一个基于名称的分组集合(我可能有 20 个 Dave,但我只想在我的集合中看到一个)。

现在我可以想到很多这可能有用的情况,但我认为在 C# 2.0 中如果没有我明确地跟踪我用另一个内部列表产生的内容是不可能的。要做到这一点,我需要访问先前产生的集合以检查它们是否存在。

这是我想太多还是有意义?也许通过IEnumerable<T>界面访问产量是有意义的,所以你可以做这样的事情 -

IEnumerable<User> UsersByNameGroup(User userToGroupBy) 
{
    foreach(User u in Users)
    {
        if(!yield.Find(delegate(User u){return u.Name == userToGroupBy.Name;})) yield return u;
    } 
}
4

1 回答 1

1

不,您必须在内部跟踪生成的元素。但请注意,基于散列的查找数据结构(字典等)足以检测重复项。

(附带说明:在 .NET 3.5 中,有内置GroupBy-Methods)

于 2009-11-18T15:18:21.600 回答