代码之家  ›  专栏  ›  技术社区  ›  Master Silver

字典到元组列表

  •  0
  • Master Silver  · 技术社区  · 1 年前

    简短的问题。有没有办法用Linq或任何其他默认解决方案来做到这一点?

    元组列表中具有相同关键字但不同值的两个字典。列表应该只包含值,其中两个字典都有匹配的键。

    public static List<Tuple<TOut1, TOut2>> ParseToTupleList<TKey, TOut1, TOut2>(
        IDictionary<TKey, TOut1> a,
        IDictionary<TKey, TOut2> b)
    {
        var list = new List<Tuple<TOut1, TOut2>>(a.Count());
    
        foreach (var keyValue in a)
        {
            if (b.TryGetValue(keyValue.Key, out var bValue))
            {
                list.Add(new Tuple<TOut1, TOut2>(keyValue.Value, bValue));
            }
        }
    
        return list;
    }
    
    1 回复  |  直到 1 年前
        1
  •  2
  •   gunr2171    1 年前

    你可以使用 Where() 而不是 if ,和 Select() 而不是 list.Add

    return a
        .Where(aEntry => b.ContainsKey(aEntry.Key))
        .Select(aEntry => new Tuple<TOut1, TOut2>(aEntry.Value, b[aEntry.Key]))
        .ToList();
    

    通常情况下,“Contains”是一个O(n)运算,但对于字典,它是O(1),所以这不会影响性能。您也可以重写此以使用 join 相反,按键匹配A的条目和B的条目。

    return (from aEntry in a
            join bEntry in b on aEntry.Key equals bEntry.Key
            select new Tuple<TOut1, TOut2>(aEntry.Value, bEntry.Value)).ToList();