0

我必须将来自 12 个节点的数据放入一个结构中,我现在这样做

int j = 0;
edges[j].node1_location = 1;
edges[j].node2_location = 2;
edges[j].isLandWay = true;
edges[j].needToBeChecked = true;
edges[j].weight = 6;

j++;
edges[j].node1_location = 1;
edges[j].node2_location = 3;
edges[j].isLandWay = false;
edges[j].needToBeChecked = true;
edges[j].weight = 1;

但我不喜欢这样有没有更好的方法来做到这一点(每个节点的数据都是唯一的)我正在考虑制作一个外部文件,我将数据放入并加载它。代码的优势将是更清洁的缺点数据永远不会改变

编辑感谢所有人的反应,我认为我会选择 xml 或 csv 文件

4

3 回答 3

2

可能不会干净,但您可以将值编码为数组:

object[][] data = new object[][]
{
    {1, 2, true,  true, 6 },
    {1, 3, false, true, 1 },
...
}

然后只需使用循环来初始化您的对象:

for(int j = 0; j < data.GetLength(0); j++)
{
    edges[j].node1_location  = (int) data[j,0];
    edges[j].node2_location  = (int) data[j,1];
    edges[j].isLandWay       = (bool)data[j,2];
    edges[j].needToBeChecked = (bool)data[j,3];
    edges[j].weight          = (int) data[j,4];
}

另一种选择是在临时项目中创建数组以将其序列化为 XML。然后你的真实程序可以反序列化 XML。

于 2013-10-29T01:01:43.803 回答
1

一些简写代码可能是:

Edge[] edges = new[]
    {
        new Edge() 
        {
            node1_location = 1,
            node2_location = 2,
            isLandWay = true,
            needToBeChecked = true,
            weight = 6
        },
        new Edge() 
        {
            node1_location = 1,
            node2_location = 3,
            isLandWay = false,
            needToBeChecked = true,
            weight = 1
        },
        // Add more nodes here.    
    };
于 2013-10-29T00:59:43.263 回答
0

如果要为结构定义构造函数,则可以说:

int j = 0;
edges[j++] = new Edge(1, 2, true,  true, 6);
edges[j++] = new Edge(1, 3, false, true, 1);
etc.

或者

Edge edges[] = new edges[] {
  new Edge(1, 2, true,  true, 6),
  new Edge(1, 3, false, true, 1),
  etc.
};

请注意,使用构造函数并不意味着将结构字段封装在属性中的任何要求。如果一个结构的目的是表现为一堆用胶带粘在一起的变量,那么公开结构的字段是明确该目的的好方法。如果结构的指定行为允许读取所有字段并使用任何所需的字段值组合创建实例,则这些要求意味着与公开字段结构等效的语义,因此也可以简单地使用公开字段结构。请注意,所谓的“可变结构”的弊端与结构方法或 mutate 属性的问题有关this,而不是与允许外部代码改变其公共字段的问题有关。鉴于:

struct Foo { public int a,b; }
Foo myFoo = computeSomething();

那么 的含义myFoo.a就是“写入 myFoo.a 的最后一个值”,或者在这种情况下,“computeSomething存储在a返回值的字段中的值。该computeSomething()方法可能对该字段中的内容做出一些承诺,但Foo没有。

于 2013-10-29T06:01:23.587 回答