将 C# 中的 Dictionary 转换为多维数组

4
我正在尝试将Dictionary<string, string>转换为多维数组。 多维数组中的项应该用引号括起来。 到目前为止,我得到了这个["[mary, online]","[alex, offline]"]。 但输出应该类似于[["mary", "online"], ["alex", "offline"]]。请帮忙。
public void sendUpdatedUserlist(IDictionary<string, string> message)
{
    string[] array = message
      .Select(item => string.Format("[{0}, {1}]", item.Key, item.Value))
     .ToArray();
}

你是指像 string[,] 这样的多维数组还是像 string[][] 这样的交错数组? - John Wu
不要使用 string.Format,而是使用 new string[]{ item.key,item.value} - Fildor
你应该使用一个真正的JSON序列化器来处理这个。这样可以避免与大量边缘情况的错误斗争,并且可能会以更快的速度运行,这是一个额外的好处。 - Joel Coehoorn
2个回答

3

如果你坚持使用2d数组(string[,],而不是jaggedstring[][]),你可以创建数组并逐行填充:

string[,] array = new string[message.Count, 2];

int index = 0;

foreach (var pair in message) {
  array[index, 0] = pair.Key;
  array[index++, 1] = pair.Value; 
}

2

string.Format 不会返回一个数组,你很接近了,但是你想要的是“选择”一个实际的数组。像这样:

var arr = dict.Select(kvp => new[] { kvp.Key, kvp.Value }).ToArray();

这将返回类型为string[][],它在技术上是一个不规则数组(与真正的二维数组string[,]不同,因为每个维度的大小不必相同),而不是你在示例代码中声明的一维string[]

如果您真的需要一个二维数组,那么您不能使用LINQ和.ToArray()来实现,您将不得不使用循环自己填充它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接