有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

另一个字典中的java字典+一个键的多个值

我想编一本包含另一本词典的词典。我希望我的字典中只有一个键有多个值,但我得到一个错误:“一个具有相同键的元素已经存在”。我已经用JAVA和HashMap做过了,还可以,但是用C#

大概是这样的:

static Dictionary<int, Dictionary<double, double>> _dict = new Dictionary<int, Dictionary<double, double>>()
        {
            { 1, new Dictionary<double,double>{ { 0.990, 0.0316 } } },
            { 1, new Dictionary<double,double>{ { 0.975, 0.0398 } } },
            { 1, new Dictionary<double,double>{ { 0.950, 0.0239 } } },
            { 1, new Dictionary<double,double>{ { 0.9  , 0.0158 } } },
            { 1, new Dictionary<double,double>{ { 0.1  , 2.71 } } },
            { 1, new Dictionary<double,double>{ { 0.050, 3.84 } } },
            { 1, new Dictionary<double,double>{ { 0.025, 5.02 } } },
            { 1, new Dictionary<double,double>{ { 0.010, 6.63 } } },

            { 2, new Dictionary<double,double>{ { 0.990, 0.02 } } },
            { 2, new Dictionary<double,double>{ { 0.975, 0.05 } } },
            { 2, new Dictionary<double,double>{ { 0.950, 0.10 } } },
            { 2, new Dictionary<double,double>{ { 0.9  , 0.21 } } },
            { 2, new Dictionary<double,double>{ { 0.1  , 4.60 } } },
            { 2, new Dictionary<double,double>{ { 0.050, 5.99 } } },
            { 2, new Dictionary<double,double>{ { 0.025, 7.38 } } },
            { 2, new Dictionary<double,double>{ { 0.010, 9.21 } } },

            { 3, new Dictionary<double,double>{ { 0.990, 0.12 } } },
            { 3, new Dictionary<double,double>{ { 0.975, 0.22 } } },
            { 3, new Dictionary<double,double>{ { 0.950, 0.35 } } },
            { 3, new Dictionary<double,double>{ { 0.9  , 0.58 } } },
            { 3, new Dictionary<double,double>{ { 0.1  , 6.25 } } },
            { 3, new Dictionary<double,double>{ { 0.050, 7.81 } } },
            { 3, new Dictionary<double,double>{ { 0.025, 9.35 } } },
            { 3, new Dictionary<double,double>{ { 0.010, 11.34 } } },
};

我尝试洛德塔克拉的解决方案

我这样做是因为我必须表示KHI2表。我用JAVA做这个,我的软件工作得很好,但我不知道如何在中使用REF。净


共 (2) 个答案

  1. # 1 楼答案

    如果您有重复的键,如下面所示,您希望所有这些值都在一个内部字典中

    { 1, new Dictionary<double,double>{ { 0.990, 0.0316 } } },
    { 1, new Dictionary<double,double>{ { 0.975, 0.0398 } } },
    { 1, new Dictionary<double,double>{ { 0.950, 0.0239 } } },
    { 1, new Dictionary<double,double>{ { 0.9  , 0.0158 } } },
    { 1, new Dictionary<double,double>{ { 0.1  , 2.71 } } },
    { 1, new Dictionary<double,double>{ { 0.050, 3.84 } } },
    { 1, new Dictionary<double,double>{ { 0.025, 5.02 } } },
    { 1, new Dictionary<double,double>{ { 0.010, 6.63 } } },
    

    变成:

    { 1, new Dictionary<double,double>{ 
        { 0.990, 0.0316 }, { 0.975, 0.0398 }, { 0.975, 0.0398     
        }, ........ }}
    
  2. # 2 楼答案

    正如错误所提示的,在C#字典中不能有多个具有相同键的值。这很好,一个重复的键会返回什么值?这充其量只是一种未定义的行为

    但是,您正在编写的代码只需进行一次调整即可正常工作:

    static Dictionary<int, List<Dictionary<double, double>> = new Dictonary<int, List<Dictionary<double, double>>()
    {
        {1, new List<Dictionary<double, double>()
            {
                new Dictionary<double,double>{ { 0.990, 0.0316 } },
                new Dictionary<double,double>{ { 0.975, 0.0398 } }
            }
        },
        ...
    }
    

    键可以映射到集合(集合本身可以容纳集合)。从您发布的代码来看,这似乎是最有可能的解决方案。如果我能澄清任何事情,请告诉我

    更新:如果保证这些“嵌套”字典中的每一个都只有一个元素,则可以使用另一个答案或KeyValuePair:

    static Dictionary<int, List<KeyValuePair<double, double>> = new Dictonary<int, List<KeyValuePair<double, double>>()
    {
        {1, new List<KeyValuePair<double, double>()
            {
                { 0.990, 0.0316 },
                { 0.975, 0.0398 }
            }
        },
        ...
    }