有没有一种方法可以从Guid列表中生成一个Guid ?
本文关键字:Guid 一个 列表 一种 方法 有没有 | 更新日期: 2023-09-27 17:53:41
我有一个对象列表,它们有id的guids。我想使用这个对象列表中的id来创建一个向导,我可以使用它来确保列表没有改变。如果一个对象被删除/添加,那么guid将会不同。我想到的是使用哈希。也许我应该使用哈希,但我想知道这是否可能比生成哈希更快?
编辑:我从一个存储过程中得到这个列表。然后将对象列表存储到内存缓存中。每个用户将根据生成的值验证cookie中的本地值,以确保列表仍然相同。
您可以编写自己的类来访问列表或哈希集或任何其他支持它的集合:
class GuidList // You can implement IReadOnlyList
{
public bool Dirty { get; private set;}
// Omit if implementing `IReadOnlyList`
public Guid[] Guids { get { return guidCollection.ToArray() }
public void Add(Guid guid) // Do similarly for remove
{
Dirty = true;
// implement logic
}
}
当您需要知道对象是否与之前完全相同时,您不能单独依赖散列-对象的散列允许您明确地告诉对象不同,但它不能保证对象相同。
通常有几种方法可以解决这个问题:
- 在哈希值上经常发生小概率的潜在冲突是可以接受的,你可以使用足够长的哈希来满足你的需求。通常,像SHA256这样的加密哈希函数提供足够低的碰撞率来适应它。如果需要,这样的值很容易适合HTTP cookie。
- 如果对象足够小(例如几个K),发送整个对象到客户端可能是一个选项(将给你机会在回发时执行精确的比较)。
- 如果你能以某种方式清楚地保证对象的版本是唯一的(修改日期,当前自动递增的顺序更新),你可以保留特定对象的那部分信息。通常这样的版本信息很小,很容易在cookie中发送。
注意:根据您的需求,您可能需要加密/签名cookie值(可能使用盐),以防止客户端代码篡改您的cookie值