Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,我应该使用什么数据类型来存储具有标准偏差的数字列表?_C#_.net - Fatal编程技术网

在C#中,我应该使用什么数据类型来存储具有标准偏差的数字列表?

在C#中,我应该使用什么数据类型来存储具有标准偏差的数字列表?,c#,.net,C#,.net,我正在执行一些测试,我有一个表中有错误的值列表: 12.7 ± 0.3 14.2 ± 0.1 70.8 ± 0.5 我需要将标准偏差与数值保持在一起,因为我需要在以后的各种计算中使用它 目前我正在使用 List<KeyValuePair<double, double>> 列表 但是有更好的解决办法吗 以下是您当前拥有的一些其他选项: 这取决于你选择和使用什么是方便的。不知道性能是否是你想要的 选项1(如果您使用的是C#7.0或更高版本): 怎么样 元组中不会有键值对

我正在执行一些测试,我有一个表中有错误的值列表:

12.7 ± 0.3
14.2 ± 0.1
70.8 ± 0.5
我需要将标准偏差与数值保持在一起,因为我需要在以后的各种计算中使用它

目前我正在使用

List<KeyValuePair<double, double>>
列表

但是有更好的解决办法吗

以下是您当前拥有的一些其他选项:

这取决于你选择和使用什么是方便的。不知道性能是否是你想要的

选项1(如果您使用的是C#7.0或更高版本):

怎么样

元组中不会有键值对,而是项

备选案文2: 就像Dan wilson在对你的问题的评论中提到的那样,创建一个包含值和错误的类

public class ValueWithDeviation
{
    public double Value {get; set;}

    public double Deviation {get; set;}
}

然后您可以拥有
IEnumerable

以下是您当前拥有的一些其他选项:

这取决于你选择和使用什么是方便的。不知道性能是否是你想要的

选项1(如果您使用的是C#7.0或更高版本):

怎么样

元组中不会有键值对,而是项

备选案文2: 就像Dan wilson在对你的问题的评论中提到的那样,创建一个包含值和错误的类

public class ValueWithDeviation
{
    public double Value {get; set;}

    public double Deviation {get; set;}
}

然后,您可以使用
IEnumerable

,正如DanWilson和Cybercop所建议的,我认为创建一个专用类型()是一种方法,因为带有偏差的值可以一起视为一个逻辑对象。此外,当您想要显示值时,这将使您的工作更轻松,因为您只需要在您的类型中重写
ToString
方法


至于底层类型,它可能对您更方便,但这取决于您特定的项目/需求。

正如DanWilson和Cybercop所建议的,我认为创建一个专用类型()是一种方法,因为带有偏差的值可以一起视为一个逻辑对象。此外,当您想要显示值时,这将使您的工作更轻松,因为您只需要在您的类型中重写
ToString
方法


至于底层类型,它可能对您更方便,但这取决于您的特定项目/需求。

如果值不改变,我将使用struct。您可以添加逻辑(但也可以使用类来添加逻辑)。除非您特别需要双精度,否则使用十进制

public struct StdDev
{
    public decimal Val { get; }
    public decimal Dev { get; }
    public decimal Max { get { return Val + Dev; } }
    public decimal Min { get { return Val - Dev; } }
    public bool IsInDev (decimal val)
    {
        return val >= Min && val <= Max;
    }
    public override string ToString()
    {
        return $"{Val} +- {Dev}";
    }
    public StdDev (decimal val, decimal dev)
    {
        Val = val;
        Dev = dev;
    }
}
公共结构StdDev
{
公共十进制值{get;}
公共十进制Dev{get;}
公共十进制最大值{get{return Val+Dev;}}
公共十进制Min{get{return Val-Dev;}
公共布尔IsInDev(十进制val)
{

返回val>=Min&&val如果值不改变,我将使用struct。您可以添加逻辑(但也可以使用类来添加)。除非您特别需要double,否则使用decimal

public struct StdDev
{
    public decimal Val { get; }
    public decimal Dev { get; }
    public decimal Max { get { return Val + Dev; } }
    public decimal Min { get { return Val - Dev; } }
    public bool IsInDev (decimal val)
    {
        return val >= Min && val <= Max;
    }
    public override string ToString()
    {
        return $"{Val} +- {Dev}";
    }
    public StdDev (decimal val, decimal dev)
    {
        Val = val;
        Dev = dev;
    }
}
公共结构StdDev
{
公共十进制值{get;}
公共十进制Dev{get;}
公共十进制最大值{get{return Val+Dev;}}
公共十进制Min{get{return Val-Dev;}
公共布尔IsInDev(十进制val)
{

return val>=Min&&val您当前的解决方案有什么问题,表明您需要更好的解决方案?如何更好?在什么方面?您的解决方案看起来很好。我看不出有什么问题。另一个选项是创建一个类并使用
List
,但这可能有些过分。我可能会为
val创建一个特定的结构UE和标准偏差
-这里不是真正的
键值对
;在我看来,使用
键值对
并不能清楚地表达值的含义。对于您的目的来说,双精度足够吗?因为浮点运算可能很混乱。您当前的解决方案有什么问题,表明您需要更好的解决方案?Better如何?在什么方面?您的解决方案看起来很好。我看不出这有什么问题。另一种选择是创建一个类并使用
列表
,但这可能有点过头了。我可能会为
值和标准偏差
创建一个特定的结构-这里它实际上不是
键值对
;使用
键值对
IMO没有清楚地表达值的含义。对于您的目的来说,双精度足够吗?因为浮点运算可能会很混乱。基于@Konamiman对“类或结构”的链接,最好将其设计为结构。作为副作用,ValueWithError值(双关语)变得不可变。错误不是偏差的最佳名称。可能值得注意的是,选项1需要C#7.0或更高版本。基于@Konamiman指向“类或结构”的链接,最好将其设计为结构。作为副作用,ValueWithError值(双关语)变得不可变。错误不是偏差的最佳名称。可能值得明确指出的是,选项1需要C#7.0或更高版本。