C#将字符串转换为多维整数数组

C#将字符串转换为多维整数数组,c#,.net,xna,C#,.net,Xna,我制作了一个使用多维数组的平铺级系统,例如: new int[,]{ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},

我制作了一个使用多维数组的平铺级系统,例如:

new int[,]{
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,},
            {0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
            {0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
            {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,},
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
每个特定的数字表示一个块(平铺)。 这只是代码。我想编写一个可以加载级别(多维int数组)的系统代码 该数组需要从字符串转换。我该怎么做

    public static int[,] getLvl(string lvlName = "")
    {
        string readed = "";
        using (StreamReader read = new StreamReader(path))
        {
            readed = read.ReadToEnd();
        }
        return null; //What to put here?!?!?!
    }

编辑:我还没有要读取的文件格式。因此,您可以在这方面灵活使用。

我相信还有其他一些关于这方面的帖子,但是您可以使用XML并解析每个可能的维度,或者使用
SoapFormatter
类立即序列化所有内容。下面是一个类似问题的链接,并附有一些示例:


我很快就为你做好了你可以做得更好别忘了投票:

使用系统;
使用System.Collections.Generic;
使用System.Collections.ObjectModel;
使用System.Linq;
使用System.Runtime.InteropServices;
使用系统文本;
使用System.Text.RegularExpressions;
使用System.Threading.Tasks;
命名空间控制台应用程序1
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
变量数组=
"{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,} , {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}";
字符串输入=数组;
字符串模式=@“{124;}”;
var指数=0;
var结果=新整数[100100];
foreach(变量结果在Regex.Split中(输入,模式))
{
var sp=result.Split(',');

如果(sp.Length我认为您真的不需要或者不应该费心尝试将其序列化为XML或其他格式,因为您的数据存储非常简单

一种简单的方法是将数组作为逗号分隔的值存储在文本文件中。因此,一个级别可能有:

0,0,0,1
0,1,1,0
0,1,1,3
3,3,4,1
该方法对于解析这样简单的内容非常有用,它允许您根据某个定界字符将字符串拆分为子字符串数组

逐步:

首先,您可以使用
var RowArray=MyString.Split('\n')
(换行符)将字符串拆分为一个行数组。这将为您留下数组:

[0]: "0,0,0,1"
[1]: "0,1,1,0"
[2]: "0,1,1,3"
[3]: "3,3,4,1"
您可以大致了解
Split()
在这里做了什么,以及为什么这对您的案例很有用。您可以依次在
'、'
上运行Split每行,留下一个数组数组,您可以非常轻松地将其转换为您要查找的2D数组

这里的一个陷阱是,根据您的设计需要,一个不变量可能是文件中所有行的长度都相同。或者,如果您不能保证这一点,则必须编写一些代码,以便在将以下文本从行数组转换为数组时,将宽度设置为最长的行并填充blanks使用0或其他方法

0,0,0,1,6,4
0,1,1,0
0,1,1,3,2,6,3,7,1
3,3,4,1,2,4

最短的方法是使用linq,对于这种格式:

 0,0,0,0,0
 1,0,1,0,1
 ....
你可以用这个句子:

 int[][] Data =   File.ReadAllLines( path )
                      .Select( s => s.Trim())
                      .Where( s => !string.IsNullOrempty(s))
                      .Select( s => s.Split( ',' )
                                     .Select( token => int.Parse( token ) )
                                     .ToArray( ) )
                      .ToArray( );

 var DataToOneDim = Data.SelectMany( a => a).ToArray();
 var Result = new int[Data[0].Length, Data.Length];
 Buffer.BlockCopy( DataToOneDim, 0, Result, 0, DataToOneDim.Length );

那么,文件中的数据是如何格式化的呢?唯一发布的代码(StreamReader)已经过时了。没有用处。我经常看到那些游戏贴片的问题。所以我只想说几句话,研究一下;Tile class.Xml。你的代码非常棒…只是它不是我要找的数组类型。我要找的是:
int[,]
yes..是一个锯齿状数组,但是从linq获取多维数组并不是一个简单的方法,锯齿状数组是等效的…@joppiesaus我已经添加了转换它的代码:)尽管我认为使用锯齿状数组或多维数组也是一样的
 int[][] Data =   File.ReadAllLines( path )
                      .Select( s => s.Trim())
                      .Where( s => !string.IsNullOrempty(s))
                      .Select( s => s.Split( ',' )
                                     .Select( token => int.Parse( token ) )
                                     .ToArray( ) )
                      .ToArray( );

 var DataToOneDim = Data.SelectMany( a => a).ToArray();
 var Result = new int[Data[0].Length, Data.Length];
 Buffer.BlockCopy( DataToOneDim, 0, Result, 0, DataToOneDim.Length );