如何将其变成多维数组?

时间:2015-01-09 12:31:03

标签: c# php arrays multidimensional-array

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

我想知道如何将以下数组用PHP编写成C#

$array = array("first_array" => array(), "second_array" => array());

我尝试了以下但是它似乎并没有真正起作用

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

如果有人可以帮助我或指导我,我会感激不尽。

4 个答案:

答案 0 :(得分:6)

要在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

注意:
数组可以调整大小,因此 可以使用数组而不是列表,但在这种情况下,最好使用列表。列表被设计为调整大小,数组不是工作的最佳工具

答案 1 :(得分:0)

我不太了解C#,但这不是那种有效的方式。 C#中的string []和大多数编程语言中的string []表示字符串数组。您可能希望使用Dictionary<string key, string[] array>来执行此操作。不知道C#中的Dictionary是否与Java中的HashMap相同,但我记得,它是一样的。

答案 2 :(得分:0)

// 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

答案 3 :(得分:0)

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

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

但是如果你的对象只有两个固定字段“first_array”和“second_array”,那么最好使用简单类,如下所示:

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;