C# 优雅地指定二维字符串数组

C# 优雅地指定二维字符串数组,c#,arrays,string,C#,Arrays,String,我试图实例化一个二维字符串数组。我的问题是数组的第二个维度并不完全相同,我不知道如何在代码方面指定这个维度 这些变量指定了电路板。共有4块电路板,每个电路板具有不同数量的触点。对于每个联系人,都有关于其用途的说明 int numBoards = 4; String[] boardNames = {"FirstBoard", "Second Board", "Third Board", "Fourth Board"}; int[] numContacts = { 32, 24, 48, 32 };

我试图实例化一个二维字符串数组。我的问题是数组的第二个维度并不完全相同,我不知道如何在代码方面指定这个维度

这些变量指定了电路板。共有4块电路板,每个电路板具有不同数量的触点。对于每个联系人,都有关于其用途的说明

int numBoards = 4;
String[] boardNames = {"FirstBoard", "Second Board", "Third Board", "Fourth Board"};
int[] numContacts = { 32, 24, 48, 32 };
String[][] descriptions = new String[numBoards][???];
如何指定
描述
数组的第二维度大小不同;在
numContacts
中指定的大小

这是唯一的办法吗?还是有更优雅的

int numBoards = 4;
String[] boardNames = {"FirstBoard", "Second Board", "Third Board", "Fourth Board"};
int[] numContacts = { 32, 24, 48, 32 };

String[] desc1 = new String[numContacts[0]];
String[] desc2 = new String[numContacts[1]];
String[] desc3 = new String[numContacts[2]];
String[] desc4 = new String[numContacts[3]];
String[][] descriptions = new String[numBoards][];
descriptions[0] = desc1;
descriptions[1] = desc2;
descriptions[2] = desc3;
descriptions[3] = desc4;

您可以使用Linq查询生成锯齿状数组:

int[] numContacts = { 32, 24, 48, 32 };

String[][] descriptions = numContacts.Select(c => new string[c]).ToArray();

您可以使用Linq查询生成锯齿状数组:

int[] numContacts = { 32, 24, 48, 32 };

String[][] descriptions = numContacts.Select(c => new string[c]).ToArray();

可以使用对象初始化器语法填充数组:

string[][] strings =
{
    new[] { "Fred", "Bob" },
    new[] { "Anne", "Steve", "John" }
};

如果您所说的优雅是指语法方面的

,则可以使用对象初始化器语法来填充数组:

string[][] strings =
{
    new[] { "Fred", "Bob" },
    new[] { "Anne", "Steve", "John" }
};

如果你说的优雅是指语法方面的

我认为更优雅的解决方案是根本不使用2d数组,而是使用Board类数组

public class Board {
  public Board(String name, int contactCount) {
    Name = name;
    Contacts = new List<String>(contactCount);
  }

  public String Name { get; set; }
  public List<String> Contacts { get; set; }
  ...
}
公共课程委员会{
公用线路板(字符串名称,int contactCount){
名称=名称;
联系人=新列表(联系人计数);
}
公共字符串名称{get;set;}
公共列表联系人{get;set;}
...
}

我认为更优雅的解决方案是根本不使用2d数组,而是使用Board类数组

public class Board {
  public Board(String name, int contactCount) {
    Name = name;
    Contacts = new List<String>(contactCount);
  }

  public String Name { get; set; }
  public List<String> Contacts { get; set; }
  ...
}
公共课程委员会{
公用线路板(字符串名称,int contactCount){
名称=名称;
联系人=新列表(联系人计数);
}
公共字符串名称{get;set;}
公共列表联系人{get;set;}
...
}

如果它变大,您可能会开始将数据放入文件中,然后解析文件。您对内部数组使用了数组初始化语法。对包含数组也要这样做。也就是说,整个设计看起来很糟糕。创建一个表示电路板的类。如果该类变大,您可能会开始将数据放入一个文件中,然后解析该文件。您对内部数组使用了数组初始化语法。对包含数组也要这样做。也就是说,整个设计看起来很糟糕。制作一个类来表示电路板。纯二维应该是每个二维都具有相同值的东西?//那么这就可以找到数组的第一维度和第二维度了?@user1596244我想说二维数组是一个“矩形”数组,但这是一个语义问题,与你的问题无关,所以我将删除该部分。我发布的代码可以生成一个锯齿状数组。这很有意义,我想我只是没听说过而已谢谢,做得很好!纯二维是指每个第二维度的值相同的东西?//那么这就可以找到数组的第一维度和第二维度了?@user1596244我想说二维数组是一个“矩形”数组,但这是一个语义问题,与你的问题无关,所以我将删除该部分。我发布的代码可以生成一个锯齿状数组。这很有意义,我想我只是没听说过而已谢谢,做得很好!忍者对我说:P这就是我要建议的,因为它在眼睛上更容易阅读,也更容易管理。忍者对我说:P这就是我要建议的,因为它在眼睛上更容易阅读,也更容易管理。