如何将其变成多维数组?

How to make this into a multidimensional array?

我刚开始学习 C#,我是一名优秀的 PHP 开发人员,我正在尝试构建一个基本的 21 点应用程序进行练习,我迷路了,因为 PHP 中的数组和C# 中的数组是如此不同

我想知道如何使用 PHP 编写到 C#

中的以下数组
$array = array("first_array" => array(), "second_array" => array());

我尝试了以下方法,但似乎并不奏效

string[] array = ["first_array" => string[], "second_array" => string[]];

如果有人能帮助我或指导我,我将不胜感激。

在C#中声明一个多维字符串数组,很简单,这么写:

string[,] array = new string[4,4];//size of each array here

初始化数组的方法与在 C(++) 中相同,使用大括号:

string[,] array = new string[,] { {"index[0][0]", "index[0][1]"}, {"index[1][0]", "index[1][1]"} };

basic tut on arrays in C# here

但是你不是在创建数组,而是使用字符串作为键,这意味着你需要 Dictionary:

Dictionary<string, string[]> dictionary = new Dictionary<string, string[]> {
    {"first_array", new string[4]},
    {"second_array", new string[4]}
};

Dictionary 的情况下,由于其声明非常冗长,因此经常看到依赖于 C# implicit typing 的代码稍微简化一下:

var dictionary = new Dictionary<string, string[]> {
    {"first_array", new string[4]},
    {"second_array", new string[4]}
};

more on Dictionary here

更新:

因为您希望能够在进行时将字符串附加到数组(即:您在创建数组时不知道数组的长度),所以您不能真正使用常规字符串数组。您必须使用字符串列表字典:

var dictionary = new Dictionary<string, List<string>> {
    "first_list", new List<string>() { "first string", "second string" },
    "second_list", new List<string>() { "first string", "second string" }
};

所以现在,将它们放在一起,以及如何将字符串添加到列表以及如何将列表添加到字典的一些示例:

//add string to list in dictionary:
dictionary["first_list"].Add("third string");
//suppose we have an array, how to add to the dictionary?
string[] some_array = new string[2] {"string1", "string2"};
//simply initialize list using array of strings
var temp_list = new List<string>(some_array);
//add new key to dictionary
dictionary.Add("new_list", temp_list);

docs on the List<T> class

注:
数组 可以 调整大小,因此 可以使用数组而不是列表,但在这种情况下,最好使用列表。列表旨在调整大小,数组不是完成这项工作的最佳工具

我对 C# 不是很了解,但这不是工作的方式。 C# 和大多数编程语言中的 string[] 表示一个字符串数组。您可能想使用 Dictionary<string key, string[] array> 来做到这一点。不知道 C# 中的 Dictionary 是否与 Java 中的 HashMap 相同,但我记得是一样的。

// Two-dimensional array.
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// The same array with dimensions specified.
int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// A similar array with string elements.
string[,] array2Db = new string[3, 2] { { "one", "two" }, { "three", "four" },
                                        { "five", "six" } };

// Three-dimensional array.
int[, ,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, 
                                 { { 7, 8, 9 }, { 10, 11, 12 } } };
// The same array with dimensions specified.
int[, ,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, 
                                       { { 7, 8, 9 }, { 10, 11, 12 } } };

更多示例http://msdn.microsoft.com/tr-tr/library/2yd9wwz4.aspx

C# 是一种静态类型语言,因此它的数组不能包含不同类型的元素。

您的 PHP 数组实际上是一个散列,因此您可以使用 .NET 的散列,即字典。

但是如果你的对象只有两个固定字段"first_array"和"second_array",那么最好使用简单的class,像这样:

public class MyObject
{
    public string[] first;
    public string[] second;
}

对于简单的对,您也可以使用元组:

var pair = new Tuple<string[], string[]>({"aa", "bb"}, {"cc", "dd"});
var first = pair.Item1;
var second = pair.Item2;