将元素添加到列表字典

飞狐

我有

Dictionary<string, List<int>> myDict = new Dictionary<string, List<int>>();

在某些时候,我想为特定的字典关键字添加数字到myDict。

我目前正在做

if (!myDict.ContainsKey(newKey)){
    myDict[newKey] = new List<int>();
}
myDict[newKey].Add(myNumber);

但这似乎容易出错,有时甚至会忘记ContainsKey检查。我一直在寻找一种方法,使myDict [“ entry”]尚不存在的情况下,使Dictionary返回一个新列表,但我找不到任何东西。

克里斯·辛克莱尔

这是LazyLookup我提到示例的相对简单的实现它只是IEnumerable出于简洁/简单的目的来回答问题。

本质上,在访问索引时,它将确保已将其初始化为List<T>该类的新实例

public class LazyLookup<TKey, TValue> : IEnumerable<List<TValue>>
{
   private readonly Dictionary<TKey, List<TValue>> CachedEntries;
   private readonly Func<List<TValue>> LazyListCreator;

    public LazyLookup()
        : this(() => new List<TValue>())
    {

    }
    public LazyLookup(Func<List<TValue>> lazyListCreator)
    {
        this.LazyListCreator = lazyListCreator;
        this.CachedEntries = new Dictionary<TKey, List<TValue>>();
    }

    public List<TValue> this[TKey key]
    {
        get
        {
            return GetOrCreateValue(key);
        }
    }

    private List<TValue> GetOrCreateValue(TKey key)
    {
        List<TValue> returnValue;
        if (!CachedEntries.TryGetValue(key, out returnValue))
        {
            returnValue = LazyListCreator();
            CachedEntries[key] = returnValue;
        }
        return returnValue;
    }

    public IEnumerator<List<TValue>> GetEnumerator()
    {
        return CachedEntries.Values.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

有一些用法:

var lazyLookup = new LazyLookup<string, int>();

lazyLookup["nocheck"].Add(9001);

//outputs 9001
Console.WriteLine(lazyLookup["nocheck"][0]);

//outputs 0 as it's a newly initialized list
Console.WriteLine(lazyLookup["someOtherLookup"].Count); 

在这一点上,你可以更新它是线程安全的(因为GetOrCreateValue目前是不是线程安全的),或者概括它,所以它不会以为这是的List<T>,但任何类型,或延长它来实现完整的IDictionary<TKey, TValue>接口。但是至少,如果您经常使用上面发布的上述模式,则可以考虑将字典的直接用法与某些封装互换,这可以使您琐碎的任务并消除代码重复。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mailchimp-将复选框添加到列表字段

来自分类Dev

将值附加到列表并添加到字典

来自分类Dev

将元素添加到子列表

来自分类Dev

将项目添加到列表字典

来自分类Dev

将for循环元素添加到列表

来自分类Dev

将新元素添加到列表

来自分类Dev

将字典值添加到列表?

来自分类Dev

将python字典添加到列表

来自分类Dev

将项目添加到列表字典

来自分类Dev

将列表元素添加到csv

来自分类Dev

将值列表添加到字典列表

来自分类Dev

Python将字典内容添加到字典列表

来自分类Dev

如何将列表项添加到字典?

来自分类Dev

如何在字典中将元素添加到列表中?

来自分类Dev

将新字典添加到字典python列表中

来自分类Dev

将元素添加到列表Java

来自分类Dev

将元素均匀添加到列表

来自分类Dev

将元素添加到javascript“字典”数组中

来自分类Dev

将字典的值添加到列表中

来自分类Dev

将项目添加到列表字典

来自分类Dev

Java将元素添加到列表

来自分类Dev

将元素添加到键值对列表

来自分类Dev

将python字典添加到列表

来自分类Dev

Python,将变量的名称添加到列表/字典

来自分类Dev

如何将列表添加到字典中的列表

来自分类Dev

将数据添加到列表元素

来自分类Dev

将字典添加到空列表 dict.value()

来自分类Dev

将列表添加到字典

来自分类Dev

将元素添加到字典中的列表会产生意外的结果 c#