A dictionary object that uses ranges of values for keys

前端 未结 8 833
情深已故
情深已故 2020-11-27 19:26

I have need of a sort of specialized dictionary. My use case is this: The user wants to specify ranges of values (the range could be a single point as well) and assign a v

8条回答
  •  眼角桃花
    2020-11-27 19:58

    i adapted some ideas for Dictionary and func, like "ChaosPandion" gave me the idea in his earlier post here above. i still solved the coding, but if i try to refactor
    i have a amazing problem/bug/lack of understanding:

    Dictionary, double> map = new Dictionary, double>()
    {
            { (a, b) => a == "2018" && b == 4, 815.72},
            { (a, b) => a == "2018" && b == 6, 715.72}
    };
    

    What is does is, that i call the map with a search like "2018"(year) and 4(month), which the result is double value 815,72. When i check the unique map entries they look like this:

    map working unique keys

    so thats the orginal behaviour, anything fine so far. Then i try to refactor it, to this:

    Dictionary, double> map = 
    new Dictionary, double>();
    
    WS22(map, values2018, "2018");
    
    
    
    private void WS22(Dictionary, double> map, double[] valuesByYear, string strYear)
    {
              int iMonth = 1;
    
    
                 // step by step this works:
                 map.Add((a, b) => (a == strYear) && (b == 1), dValue);
                 map.Add((a, b) => (a == strYear) && (b == 2), dValue);
    
    
    
               // do it more elegant...
               foreach (double dValue in valuesByYear)
               {
    
                 //this does not work: exception after second iteration of foreach run
                  map.Add((a, b) => (a == strYear) && (b == iMonth), dValue );
                  iMonth+=1; 
              }
    }
    

    this works: (i use b==1 and b==2)

    this does not work (map not working exception on add item on second iteration)

    so i think the problem is, that the map does not have a unique key while adding to map dictionary. The thing is, i dont see my error, why b==1 is working and b==iMonth not.

    Thx for any help, that open my eyes :)

提交回复
热议问题