【发布时间】:2019-07-03 15:27:21
【问题描述】:
我遇到的问题是我不确定如何将我的double 数组转换为Dictionary。我有一些很重的 LINQ Where 语句,所以我想使用我的 Dictionary 的键来查找特定值。我有两个带有 getter 和 setter 的类,然后是我的计算器。
我在尝试查找或Dictionary 时摆弄了一下,但没有任何运气。
public class Product
{
public int EarliestOriginYear { get; set; }
public int NoOfDevelopmentYears { get; set; }
public string ProductName { get; set; }
public IEnumerable<ProductIncrementalValue> ProductIncrementalValues { get; set; }
}
public class ProductIncrementalValue
{
public string ProductName { get; set; }
public int OriginYear { get; set; }
public int DevelopmentYear { get; set; }
public double IncrementalValue { get; set; }
}
public IList<double> Calculate(Product product)
{
IList<double> cumulativeDataTriangle = new List<double>();
if (!product.ProductIncrementalValues.Any())
return cumulativeDataTriangle;
for (int i = 0; i < product.NoOfDevelopmentYears; i++)
{
// This is what I want to change (where statements)
var incrementalValues = product.ProductIncrementalValues
.Where(v => v.OriginYear == product.EarliestOriginYear + i)
.ToList();
double previous = 0;
for (int j = 0; j < product.NoOfDevelopmentYears - i; j++)
{
// This is what I want to change
double incrementalValue = incrementalValues.Where(val =>
val.DevelopmentYear == val.OriginYear + j)
.Select(x => x.IncrementalValue)
.FirstOrDefault();
var tmp = incrementalValue + previous;
cumulativeDataTriangle.Add(tmp);
previous = tmp;
}
}
return cumulativeDataTriangle;
}
【问题讨论】:
-
double不是一个很好的候选者,因为舍入错误:字典可以有,比如0.9999999999999键,当你要求它1.00000000000001时跨度>
标签: c# arrays dictionary