当前位置:  开发笔记 > 编程语言 > 正文

多值字典

如何解决《多值字典》经验,为你挑选了5个好方法。

我如何在c#中创建一个多值字典?

例如Dictionary,第一个T是键,其他两个是值.

所以这是可能的: Dictionary

谢谢



1> Jon Skeet..:

只需创建一个Pair类型并将其用作您的值.

我在我的C#深度源代码中有一个例子.为简单起见,这里转载:

using System;
using System.Collections.Generic;

public sealed class Pair
    : IEquatable>
{
    private readonly TFirst first;
    private readonly TSecond second;

    public Pair(TFirst first, TSecond second)
    {
        this.first = first;
        this.second = second;
    }

    public TFirst First
    {
        get { return first; }
    }

    public TSecond Second
    {
        get { return second; }
    }

    public bool Equals(Pair other)
    {
        if (other == null)
        {
            return false;
        }
        return EqualityComparer.Default.Equals(this.First, other.First) &&
               EqualityComparer.Default.Equals(this.Second, other.Second);
    }

    public override bool Equals(object o)
    {
        return Equals(o as Pair);
    }

    public override int GetHashCode()
    {
        return EqualityComparer.Default.GetHashCode(first) * 37 +
               EqualityComparer.Default.GetHashCode(second);
    }
}


这与.Net 4.0中的Tuple相同吗?
@BasselAlkhateeb:如果你不喜欢能够获得价值,那么是的,那很好......
与普通的KeyValuePair相比有什么优势?使用KeyValuePair时是否存在某种开销?
@ adam0101:很多,是的.

2> Jon Erickson..:

如果您尝试将值组合在一起,这可能是创建简单结构或类并将其用作字典中的值的绝佳机会.

public struct MyValue
{
    public object Value1;
    public double Value2;
}

然后你可以有你的字典

var dict = new Dictionary();

你甚至可以更进一步实现自己的字典类,它将处理你需要的任何特殊操作.例如,如果您想要一个接受int,object和double的Add方法

public class MyDictionary : Dictionary
{
    public void Add(int key, object value1, double value2)
    {
        MyValue val;
        val.Value1 = value1;
        val.Value2 = value2;
        this.Add(key, val);
    }
}

那么你可以像这样简单地实例化并添加到字典中,你不必担心创建'MyValue'结构:

var dict = new MyDictionary();
dict.Add(1, new Object(), 2.22);



3> teedyay..:
Dictionary>

编辑:对不起 - 我忘了在.NET 4.0出来之前你没有得到Tuples.D'哦!


此外,元组值是只读的,在某些情况下可能没问题,但在使用它们之前应该考虑它们.

4> Eriawan Kusu..:

我认为这对于字典语义来说是相当过分的,因为字典按照定义是一组键及其各自的值,就像我们看到一本包含单词作为键的语言字典书及其描述性意义的方式一样.值.

但是您可以表示可以包含值集合的字典,例如:

Dictionary>

或者键的字典和作为字典的值:

Dictionary>

然后你将拥有一个可以有多个值的字典.



5> Otávio Décio..:

我认为您不能直接这样做。您可以创建一个同时包含object和的类,double然后将其实例放入字典中。

class Pair
{
    object obj;
    double dbl;
}

Dictionary = new Dictionary();

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有