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

时间:2014-05-09 14:05:43

标签: c# arrays string

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

这些变量指定电路板。有4块板,每块板都有不同数量的触点。对于每个联系人,都有关于其目的的描述。

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

如何指定descriptions数组的第二维尺寸不同; 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;

3 个答案:

答案 0 :(得分:2)

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

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

如果优雅你的意思是语法明智

答案 1 :(得分:2)

我认为更优雅的解决方案是根本不使用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; }
  ...
}

答案 2 :(得分:1)

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

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

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