项目集合的最快集合,每个集合都有要迭代的项目集合

本文关键字:集合 项目 迭代 | 更新日期: 2023-09-27 18:22:26

我有一个小集合(大约10个项目),每个集合都链接了一个中等集合(从200到500)的项目(如果我是正确的,则是多对一关系)。

我正在寻找一种迭代列表的方法,如下所示:

var cardSetQry = from cs in mDb.CARD_SET
                 select cs;
List<CARD_SET> listCardSets = cardSetQry.ToList();
Dictionary<string, List<CARD>> cardsList = new Dictionary<string, List<CARD>>();
foreach (var cardSet in listCardSets)
{
    CARD_SET set = cardSet;    
    var cardQry = from c in mDb.CARD
                  where c.CARD_SET_IDE == set.CARD_SET_IDE
                  select c;
    if (cardQry.Any())
    {
        HashSet<CARD> listCards = new HashSet<CARD>(cardQry.ToList());    
        foreach (var card in listCards)
        {
            card.CARD_MASTER_IDE = null;
            card.CARD_CHILD_IDE = null;
            mDb.SaveChanges();
        }    
        cardsList.Add(set.CARD_SET_NAME, listCards);
    }
}

我使用dictionary是因为我需要卡片集名称和相关对象列表,但我愿意接受建议。该方法在应用程序启动时调用一次,并且必须遍历每个项目。

至于第二个列表(HashSet),我从上周开始使用它。小规模的研究让我相信hashSet是一种快速收集类型。但我不知道它是怎么工作的。

所以,问题是:为了实现我需要做的事情,什么是使用最快的集合,为什么?

项目集合的最快集合,每个集合都有要迭代的项目集合

无论大小,枚举HashSet<T>和枚举List<T>的速度是否有显著差异,这一点值得怀疑。

你使用的应该取决于你将如何使用它。如果你想快速确定集合中是否有东西,那么就使用HashSet。否则,请使用ListHashSet有它的用途,但作为一个简单的顺序列表,它有些过头了。它使用的内存也是List的3到4倍。

此外,在创建HashSet时执行cardQry.ToList()有什么意义?你可以直接写new HashSet<CARD>(cardQry)

在这样一个小的收集速度不是问题。如果您真的想将Dictionary映射为键值,则应该使用Dictionary。否则只使用Hashset。Hashset列表和字典的比较