【问题标题】:how to set values on floating indexes in array如何在数组中的浮动索引上设置值
【发布时间】:2016-11-06 05:50:00
【问题描述】:

我无法在 C# 中将值设置为像 arr[4.2]=11; 这样的数组中的浮动索引。我还使用了索引器。

double[] arr=new double[10];

public double this[double index]
{    
     get
     {
         if (index > 0 && index <=10)  
         {    
             return arr[index]; //here is error 
         }
         else 
         { 
             return 0;
         }
     }  
     set
     {
         if (index > 0 && index <=10) 
         {   
             arr[index] = value;    //here is error
         }
         else 
         { 
             Console.WriteLine("can not set value"); 
         }
     }
}

有一个错误提示

无法将类型“double”隐式转换为“int”

arr[index].

如何设置索引值,例如 arr[1.5]=10; arr[2.4]=20; arr[0.2]=30;

【问题讨论】:

    标签: c# arrays indexing


    【解决方案1】:

    您不能通过非整数索引到数组中。你最好使用字典。

    浮点数通常会产生糟糕的索引,因为将两个外观相似的浮点数比较为不相等不仅可能而且确实很常见。

    例如,在大多数环境中(1/3 和 1-(2/3) 会给出两个不同的结果。

    【讨论】:

      【解决方案2】:

      您可以使用Dictionary&lt;double, int&gt;

      var data = new Dictionary<double, int>();
      data[1.5] = 10;
      data[2.4] = 20;
      data[0.2] = 30;
      

      注意浮点比较问题。如果你想解决这个问题,你可以使用decimal

      【讨论】:

      • 只是为了确认 - 你明白这不是实际的建议,因为它只适用于常量浮点值?
      【解决方案3】:

      您永远不能将索引作为非整数。想象一下,如果我说你给我数组中的第 1.57 个元素。这没有任何意义。如果您希望索引为十进制或浮点数,您可以使用其他数据类型,如 Dictionary 或 HashTable,但在比较键时要注意精度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2022-12-17
        • 1970-01-01
        相关资源
        最近更新 更多