首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中表示带有键的3D数组

在C#中表示带有键的3D数组
EN

Stack Overflow用户
提问于 2017-03-29 19:48:33
回答 2查看 325关注 0票数 0

这是这个问题的继续:Best way to represent sets of 3 values

我想把物质的温度存储为时间和位置的函数。所以温度会随位置和时间而变化。关于位置,我已经将材料的整个表面划分为i*j个小区域,因此我可以分别为每个区域分配温度。例如,一个人应该能够在time=3秒读取区域3,5的温度。我的目标是,拥有一个由时间、i和j组成的集合,这样我就可以访问i=4,j=7区域中time = 3.5秒的温度。3D数组没有帮助,因为我需要能够使用时间作为键,如下所示:

代码语言:javascript
运行
复制
temperature[3.5][4,7] 

这里3.5是时间,4是i,7是j,我该怎么做呢?我应该如何访问温度数据?

EN

回答 2

Stack Overflow用户

发布于 2017-03-29 20:01:46

如果你想实现完全相同的接口,那么你应该使用索引器属性。让我们从按位置返回温度的对象开始。我就叫它Surface吧。您可以使用名称区域或任何您认为更合适的名称。这个对象应该保存表面上每个位置的温度值,或者它应该从存储中获取这些值:

代码语言:javascript
运行
复制
public class Surface
{
    // you can have time property here as well

    public double this[int i, int j]
    {
        get { return GetTemperatureValueFromDataSource(i,j); }
    }
}

现在,您需要从另一个类返回给定时间内的这些对象:

代码语言:javascript
运行
复制
public class Temperature
{
    public Surface this[double time]
    {
        get { return GetSurfaceObjectForGivenTime(time); }
    }
}

那么界面将会是你想要的:

代码语言:javascript
运行
复制
var temperature = new Temperature();
double value = temperature[3.5][4,7];

请注意,您应该考虑如何处理在给定时间内没有表面温度数据的情况,或者如果您试图获取表面点的温度超出可用范围的情况。例如,如果在给定时间内没有数据,则可以返回null,但应使用空条件运算符,以避免NullReferenceException:

代码语言:javascript
运行
复制
 double? value = temperature[3.5]?[4,7];

或者你可以返回一些NullObject,它会有一些虚拟的行为。参考曲面点不在可用范围内也是如此。您可以对温度值使用可以为空的返回类型。或者你可以抛出ArgumentOutOfRangeException

票数 2
EN

Stack Overflow用户

发布于 2019-10-11 16:40:27

我认为最好是使用Dictionary<float,Dictionary<int,Dictionary<int,float>>>

它将允许您使用第一个浮点(时间)进行索引,并将返回所有区域的字典,其中记录了给定时间的温度。

然后你可以用int i再次索引,得到所有带有该索引的区域,然后用int j再次索引,最后你可以得到那个时间和那个区域i,j的所有温度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43092649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档