【问题标题】:How to declare an array like this如何声明这样的数组
【发布时间】:2019-04-30 00:14:08
【问题描述】:

我希望将此数据声明为 C# 的数组:

file1: data1 [rect1] , data2 [rect2] , data3 [rect3]
file2: data1 [rect1] , data2 [rect2]
file3: data1 [rect1] , data2 [rect2] , data3 [rect3], data4 [rect4]
...

file和data是字符串,rect是Rectangle对象

它不一定是一个数组,但我认为数组是最好的解决方案。

我需要访问存储在数组中的数据。

例如,当我给出“file1”时,我应该能够读取所有 dataX..

另外,当我给出“file1”和“data1”时,我应该能够访问“rect1”..

你能解释一下我是怎么做到的吗?

【问题讨论】:

  • 习惯上,你会从定义一个包含datarectclass开始
  • 根据你在做什么,要么使用类,要么使用Dictionary<string, Dictionary<string, Rectangle>>

标签: c# multidimensional-array


【解决方案1】:

您可以将其定义为

Dictionary<string, List<(string Data, Rectangle Rect)>>

    (此语法使用c# 7.0 tuples

但在这种情况下,我觉得更明确的定义将有助于提高可读性。

class RectData
{
    public string Data;
    public Rectangle Rect;
    public RectData(string data, Rectangle rect) { Data = data; Rect = rect; }
}

然后你的数据类型将是一个

Dictionary<string, List<RectData>>

其中的键是file

使用Dictionary 假定file 键是不同的。如果不是,您可以通过定义更进一步

class FileData
{
    public string File;
    public List<RectData> Data;
}

然后使用一个

List<FileData>

更新

初始化可能看起来像

var myData = new Dictionary<string, List<RectData>>()
{
    { file1, new List<RectData> {
         new RectData(data1, rect1),
         new RectData(data2, rect2),
    }},
    { file2, new List<RectData> {
         new RectData(data3, rect3),
         new RectData(data4, rect4),
    }},
}

【讨论】:

  • 使用 RectData 声明已经足够好了(文件是关键)。您如何将其填充为常量?
  • @Plato 已更新答案
【解决方案2】:

我认为您要查找的是字典。有关详细信息,请参阅此文档:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.7.2

您可以将数据对象声明为:

Dictionary<string, Dictionary<string, Rectangle>> data;

您可以通过以下方式访问矩形数据:

var rectangle1 = data[file1][data1];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多