你並不需要嘗試linqify一切。當你創建一個分組時,你可以從列表中的所有數據中創建一個字典,然後你可以寫一行到輸出。這將消耗至少兩倍的內存,因爲它是必要的。 這種設計消除了延遲處理,因爲在寫入輸出之前,您正急切地將所有內容讀入內存。
相反,您可以逐個處理列表,並將當前行寫入正確的文件。這可以像使用Animal或Bird作爲關鍵字來選擇正確的輸出文件一樣,通過哈希表查找正確的文件流。
static Dictionary<string, StreamWriter> _FileMap = new Dictionary<string, StreamWriter>();
static void Main(string[] args)
{
var data = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Animal", "Lion|Roars"),
new KeyValuePair<string, string>("Animal", "Tiger|Roars"),
new KeyValuePair<string, string>("Bird", "Eagle|Flies"),
new KeyValuePair<string, string>("Bird", "Parrot|Mimics")
};
foreach (var line in data) // write data to right output file
{
WriteLine(line.Key, line.Value);
}
foreach (var stream in _FileMap) // close all open files
{
stream.Value.Close();
}
}
static void WriteLine(string key, string line)
{
StreamWriter writer = null;
if (false == _FileMap.TryGetValue(key, out writer))
{
// Create file if it was not opened already
writer = new StreamWriter(File.Create(key+".txt"));
_FileMap.Add(key,writer);
}
writer.WriteLine(line); // write dynamically to the right output file depending on passed key
}
此邏輯是否可以在不對密鑰和文件名進行硬編碼的情況下工作? – FMFF 2011-03-09 20:22:28
確定我已經更新了代碼。動態處理輸出文件的邏輯在WriteLine方法中。 – 2011-03-09 20:33:20