0

データ ファイルのサイズがわかっている場合は、データ ファイルを 2D 配列に簡単に渡すことができますが、データを追加および削除する場合はほとんど意味がありません。

グローバルであり、プログラムの残りの部分の範囲外ではない、そのデータ行の長さの 2D 配列をインスタンス化するにはどうすればよいですか?

4行6列の配列の通常のコードは次のとおりですが、データファイルにデータを追加/削除して、行の長さが不明になるようにします。

  string[,] allStudentData = new string[4, 6];
            string[] allStudents = File.ReadAllLines("data.txt");


            for (int i = 0; i < allStudents.Count(); i++)
            {
                for (int j = 0; j < 6; j++)
                {

                    string[] DataIn = allStudents[i].Split(',');

                    allStudentData[i, j] = DataIn[j];
                }
            }

あなたのアイデアをありがとう:-)

4

5 に答える 5

2

List のような変更可能なものを使用しないのはなぜですか?

.Add() コマンドを使用して列を追加できます。使用が終わったら、配列に折りたたむことができます (.ToArray())

于 2013-08-25T06:56:53.283 に答える
1

Array の代わりにカスタム オブジェクト (配列の場合もあります) を保持する List を使用し、最後にリストを ToArray 拡張機能を使用して配列に変換できます。

var list = new List<string[]>();
var data1 = new string[2] {"1", "2" };
var data2 = new string[3] {"1", "2", "3" };
list.Add(data1);
list.Add(data2);
list.ToArray(); // converts the list to string[][]

ファイルを読み終わったら、リストに項目を簡単に追加し、最後にすべての変更をファイルに書き込むことができます。将来、次のようなカスタム オブジェクトを作成する価値があるよりも、2 次元配列以上のものが必要になると思われる場合:

public class Student
{
    public string Name { get; set; }
    public int Grade { get; set; }
}

string[] の代わりにこれを使用します。

var studentData = new List<Student>();

後のメンテナンスははるかに簡単になります (アドレス、クラスの追加など)。読み書きの作業がもう少し増えることは認めますが、プロジェクトが成長すれば、それは報われるでしょう。

LINQ を使用して 1 行でデータを読み取ることができます。

// creates a List<Student>
var studentData = File.ReadAllLines("data.txt")
                        .Select(row => row.Split(','))
                        .Select(elements => 
                            new Student 
                            {
                                Name = elements[0],
                                Grade = int.Parse(elements[1])
                            }).ToList();
于 2013-08-25T07:00:44.630 に答える
0

リストを使用してファイル情報を保持してみてください。

var myList = new List<string>();
myList = File.ReadLines("data.txt");
var my2DList = new List<List<string>>();

foreach(string line in myList)
    my2DList.Add(line.Split(','));

行数を知りたい場合は、次を使用します。

int numberOfLines = my2DList.Count;

個々の行のアイテム数:

int lengthOfLine3 = my2DList[3].Length;
于 2013-08-25T07:16:07.593 に答える