ファイルをグローバル配列に読み込み、配列をループし、各文字列を対応する量で識別し、自身のグループで合計を見つけようとしています。それらのグループをそれぞれ独自の番号で分割します。2D配列を分割する最も効率的な方法は?
私が読んでいるテキストファイル:彼らは意志どの順番を知らない、コンマで行を分割し、数字はその特定の名前に対応させるための最も簡単な方法だろう何
Name,50
Name,40
DifferentName,50
AnotherName,10
Name,60
あれ?
これまで私が使用しているコードはここにありますが、今は開いているファイルダイアログだけですが、ここでは建設的な参考にしています。
string strFileName;
private void btnReadInFile_Click(object sender, EventArgs e)
{
//select the file
OpenFileDialog ofdGetFile = new OpenFileDialog();
if (ofdGetFile.ShowDialog() == DialogResult.Cancel)
{
//cancel
MessageBox.Show("User Canceled");
return;
}
else
{
//open the file
StreamReader myStreamReader;
strFileName = ofdGetFile.FileName;
FileStream input = new FileStream(strFileName, FileMode.Open, FileAccess.Read);
myStreamReader = new StreamReader(input);
// other
MessageBox.Show("Reading Complete", "Done!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void btnShowGrade_Click(object sender, EventArgs e)
{
if (strFileName != null)
{
String[][] nameSums = System.IO.File.ReadLines(strFileName)
.Select(l => l.Split(',')) // split the line
.GroupBy(arr => arr[0]) // group by name
.Select(grp => new String[]{
grp.Key,
grp.Sum(arr => int.Parse(arr[1])).ToString()})
.ToArray();
}
else
{
MessageBox.Show("You need to read in a file first.");
}
}
}
これを行うには、より良い方法が必要なように感じます。
これまでにありがとうございました!私は、この問題が解決されていない唯一の理由は、私のコミュニケーションスキルの欠如であると確信しています。
彼のデータを見るとどちらもユニークではありません。 –
@YuriyFaktorovich:私の説明は間違いだった。 OPの要件は、「数字を特定の名前に対応させる」ことでした。だから私は彼がすべての数字の名前を欲しいと思った。だから私は数字でグループ化した。 –
@YuriyFaktorovich:私の答えを編集しました。今はそれがうまくはっきりしています。 –