繁体   English   中英

将2d数组及其元素从字符串转换为int

[英]Converting a 2d array along with its elements from string to int

尽管我试图在此处的问题中找到相似的版本,但我找不到任何东西。所以我正在寻求您的帮助。 从文本文件(现在为字符串格式)中读取一些数字后,我将它们分成行和列,并将它们添加到2d数组中(也为字符串格式)。 现在,我想将一切转换为整数,以便稍后可以对数字进行排序。 这是我的代码...

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.IO;

 namespace ArrayProgram
 {
   class Program
 {
    int number = 0;
    int i = 0;
    int k = 0;
    string strnum;


    public void onetohundredints()  
    {
        StreamWriter writer = new StreamWriter("numberstored.txt");

        for (i = 0; i < 10; i++)
        {

            for (k = 0; k < 10; k++)
            {
                number++;

                Console.Write(number + " ");
                strnum = number.ToString();  
                writer.Write(strnum + " ");
            }

            Console.WriteLine();
            writer.WriteLine();
        }
            writer.Close();
    }

    public void readints()
    {
        StreamReader reader = new StreamReader("numberstored.txt");
        string data = reader.ReadToEnd();
        reader.Close();

        string[,] dataarray = new string[10,10];
        int[] numbers = new int[100];

        string[] dataperlines = data.Split(new[] { '\r','\n' },StringSplitOptions.RemoveEmptyEntries);

        for(int i=0; i<=dataperlines.Count()-1; i++)
        {
            string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            for (int j=0; j<=numbersperrow.Count()-1; j++)
            {            
                dataarray[i, j] = numbersperrow[j];
            }
        }

    }


    public static void Main(string[] args) 
    {
        Program prog = new Program();
        prog.onetohundredints();
        prog.readints();
        Console.ReadKey();
    }
}
}

将数字插入2d数组后,如何将其全部转换为整数?

如果没有特殊的原因要使用字符串数组,则可以仅将数据另存为int 只需更改您的内部for循环即可:

var parsed = int.TryParse(numbersperrow[j], out dataarray[i, j]);
if (!parsed)
{
    // Error
}

虽然应该可以,但是我建议重新编写ReadData方法,使其与下面的示例类似。

public int[,] ReadData(string filePath, int xDimension, int yDimension)
{
    var results = new int[xDimension, yDimension];

    var lines = File.ReadLines(filePath);

    for (var i = 0; i < allLines.Count(); i++)
    {
        var values = lines[i].Split(new[] { ' ' }, 
                                    StringSplitOptions.RemoveEmptyEntries);

        for (var j = 0; j < values.Count(); j++)
        {
            var parsed = int.TryParse(values[j], out results[i, j]);
            if (!parsed) { }
        }
    }

    return results;
}

您正在将所有内容放入字符串数组。 该数组只能容纳字符串,不能容纳数字。 如果要使2d数组保留数字,则将其定义为int[,] dataarray = new int[10,10]; 接下来,在最后一个循环中,只需执行dataarray[i, j] = Convert.ToInt32(numbersperrow[j]);

编辑:如果不确定numbersperrow[j]是否为数字,则可以使用int.TryParse(numbersperrow[j], out value) 如果转换失败,则Value将返回false

我很高兴地说这两种解决方案都可以。 现在,我的二维数组中有数字。 但是现在我希望和他们一起玩。 假设我要以相反的顺序在屏幕上打印数字。

拥有正确的解决方案:

        int numbers;
        int[,] dataarray = new int[10,10];
        string[] dataperlines = data.Split(new[] { '\r','\n' },StringSplitOptions.RemoveEmptyEntries);

        for(int i=0; i<=dataperlines.Count()-1; i++)
        {
            string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            for (int j=0; j<=numbersperrow.Count()-1; j++)
            {
                numbers = int.Parse(numbersperrow[j]);
                dataarray[i, j] = numbers;
                Console.Write(numbers + " ");
            }
            Console.WriteLine();
        }

我知道我必须做一个双for循环。 但是,如何为数字正确编写成功的语法呢? 我也试过这个:

int[,] reversedarray = new int[10, 10];
reversedarray[i, j] = Array.Reverse(dataarray[i,j]); 

但是dataarray [i,j]变成红色,并且出现错误“无法从int转换为system.Array。...我缺少什么?

我也尝试过...

for (i = 10; i <= dataperlines.Count(); i--)
        {
            string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            for (j =10; j <= numbersperrow.Count(); j--)
            {
                numbers = int.Parse(numbersperrow[j]);
                reversedarray[i, j] = numbers;

                Console.Write(numbers + " ");
            }
            Console.WriteLine();
        }

但是我有一个IndexOutOfRange异常来自

string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

我了解到,由于我也将列拆分为行,因此不必再次编写它,但是我陷入了困境。 我尝试简化代码,因为我拥有2darray及其元素,而我的尝试是谬误的。 还有其他建议吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM