gpt4 book ai didi

c# - 通过 guids 列表获取实体列表

转载 作者:行者123 更新时间:2023-11-30 19:37:11 24 4
gpt4 key购买 nike

我正在尝试通过他们的 guid 获取实体列表的部分实体列表。

可以通过以下方式完成:

List<Entity> GetEntitiesByGuids (List<Entity> entities, List<Guids> guids)
{
List<Entities> retVal = new List<Entities>();
foreach(var guid in guids)
{
var Entity = Entities.Find(e=>e.Guid ==guid)
retVal.Add(Entity);
}
return retVal;
}

有没有不用 foreach 的好方法?

最佳答案

在性能方面,根据另一个列表过滤列表的最佳方法是使用散列集合,因为使用散列我们可以快速查找(复杂度几乎为 O(1))

首先让我们测量时间,使用正常 List<Guid> 所需的时间哈希值:

public static List<Entity> GetEntitiesByGuids(List<Entity> entities, List<Guid> guids)
{
return entities?.Where(e => guids.Contains(e.Guid)).ToList();
}

Main()两种情况下的方法是:

var entities = new List<Entity>();
var guids = new List<Guid>();

for (int i = 0; i < 100000; i++) guids.Add(Guid.NewGuid());

for (int i = 0; i < 100000; i++) entities.Add(new Entity() {Guid = guids[i]});

var guidsToFilter = guids.Skip(12000).Take(40000).ToList();

Console.WriteLine("Started to filter list");

var s = new Stopwatch(); s.Start();

var result = GetEntitiesByGuids(entities, guidsToFilter);

s.Stop();

Console.WriteLine(s.ElapsedMilliseconds+"ms");

结果:1​​9823ms

现在让我们介绍一下HashSet<T>收藏:

public static List<Entity> GetEntitiesByGuids(List<Entity> entities, List<Guid> guids)
{
var hashedGuids = new HashSet<Guid>(guids);
return entities?.Where(e => hashedGuids.Contains(e.Guid)).ToList();
}

结果:1​​1 毫秒

关于c# - 通过 guids 列表获取实体列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39020442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com