在List中复制并计算它们

时间:2017-10-08 16:08:21

标签: c# list duplicates

这是我需要编辑的代码的一部分:

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 + "|";错误,因为它使用数学(加法)。你能帮助我吗?

1 个答案:

答案 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);
            }
        }
    }