这是我需要编辑的代码的一部分:
private static void SaveMetalToFile(List<Ring> rings)
{
using (StreamWriter writer = new StreamWriter(@"Metalai.txt"))
{
writer.WriteLine("|Metalai |Kiekis|");
string message = String.Empty;
var ringDataList = rings.GroupBy(r => r.Metalas).Select(x => new { Ring = x.FirstOrDefault(), Count = x.Count() }).ToList();
foreach (var item in ringDataList)
{
message = "|" + item.Ring.Metalas + "|" + item.Count + "|";
writer.WriteLine("{0}; {1}", ring.Metalas, message);
}
}
}
应该避免在Metalai.txt文件中放置重复项,但也要计算有多少重复项。我已经完成了大约3种方法,我的老师说它很糟糕,即使它有效。他说我必须使用2个变量
(writer.WriteLine("{0}; {1}", ring.Metalas, message)
)
但问题是我无法让它发挥作用。他说我不能在这个列表中做任何数学。应该有2个方法/功能。第一个应该只读取金属数据并将其区分开来,第二个应该计算重复数据。无论我如何尝试,我都无法让它发挥作用。
message = "|" + item.Ring.Metalas + "|" + item.Count + "|";
错误,因为它使用数学(加法)。你能帮助我吗?
答案 0 :(得分:0)
您可以执行以下操作。有很多方法可以做到这一点,但我总是喜欢使用字典或哈希集来执行你所要求的任务。至于你的打印,我认为你的老师说你可以在string.Format(...);
中做所有的格式化。 private static void SaveMetalToFile(List<Ring> rings)
{
Dictionary<string, int> finalCollection = new Dictionary<string, int>();
foreach(Ring item in rings)
{
if(finalCollection.ContainsKey(item.Metalas))
{
finalCollection[item.Metalas]++;//incement duplicate count
}
else
{
finalCollection.Add(item.Metalas, 1);//add if not exist with count of 1
}
}
using(StreamWriter writer = new StreamWriter(@"Metalai.txt"))
{
writer.WriteLine("|Metalai |Kiekis|");
foreach(var item in finalCollection)
{
writer.WriteLine("{0};|{0}|{1}|", item.Key, item.Value);
}
}
}