项目集合的最快集合,每个集合都有要迭代的项目集合
本文关键字:集合 项目 迭代 | 更新日期: 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
。否则,请使用List
。HashSet
有它的用途,但作为一个简单的顺序列表,它有些过头了。它使用的内存也是List
的3到4倍。
此外,在创建HashSet
时执行cardQry.ToList()
有什么意义?你可以直接写new HashSet<CARD>(cardQry)
。
在这样一个小的收集速度不是问题。如果您真的想将Dictionary映射为键值,则应该使用Dictionary。否则只使用Hashset。Hashset列表和字典的比较