gpt4 book ai didi

c# - 从 KeyedCollection 获取键列表的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-30 14:16:53 25 4
gpt4 key购买 nike

我正在寻找一种与通用字典的 Keys 属性(KeyCollection 类型)一样高效的方法。

使用 Linq select 语句可以,但每次请求键时它都会遍历整个集合,而我相信键可能已经存储在内部。

目前我的 GenericKeyedCollection 类如下所示:

public class GenericKeyedCollection<TKey, TItem> : KeyedCollection<TKey, TItem> {
private Func<TItem, TKey> getKeyFunc;

protected override TKey GetKeyForItem(TItem item) {
return getKeyFunc(item);
}

public GenericKeyedCollection(Func<TItem, TKey> getKeyFunc) {
this.getKeyFunc = getKeyFunc;
}

public List<TKey> Keys {
get {
return this.Select(i => this.GetKeyForItem(i)).ToList();
}
}
}

更新:感谢您的回答,因此我将使用以下属性而不是使用 Linq 进行迭代。

    public ICollection<TKey> Keys {
get {
if (this.Dictionary != null) {
return this.Dictionary.Keys;
}
else {
return new Collection<TKey>(this.Select(this.GetKeyForItem).ToArray());
}
}
}

最佳答案

根据 the documentation ,该类有一个属性,Dictionary ,所以你可以这样做:

var keys = collection.Dictionary.Keys;

请注意,如文档中所述,有一个警告。如果您使用字典的阈值构造集合,则在至少将那么多值放入集合之前不会填充字典。

如果您的情况不是这种情况,即。字典总是好的,上面的代码应该可以解决问题。

如果不是,那么您要么必须更改构造以避免设置该阈值,要么您只需要循环并通过 GetKeyForItem 提取 key 方法。

关于c# - 从 KeyedCollection 获取键列表的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6740841/

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