如何在'foreach'中减少相同的字符串?

Jos*_*rto 2 c# string

我是新编程有这个问题,我无法得到我想做的,这是我的代码

foreach(RunePage rune in runePages)
{
    if(rune.Slots != null && rune.Slots.Count > 0)
    {
        foreach(RuneSlot runeSlot in rune.Slots)
        {
            var runeName = staticApi.GetRune(RiotSharp.Region.lan, runeSlot.RuneId,    RuneData.tags, Language.es_ES).Name;
            richTextBox1.Text = runeName + "\n" + richTextBox1.Text;
        }
     }
     richTextBox1.Text = rune.Name + "\n" + richTextBox1.Text;
}
Run Code Online (Sandbox Code Playgroud)

输出:

美联社

能力更强的精髓

能力更强的精髓

能力更强的精髓

更强的能力雕文

更大的魔法抵抗雕文

更强的能力雕文

更大的魔法渗透雕文

更大的魔法渗透雕文

更大的魔法渗透雕文

更大的魔法渗透雕文

更大的魔法渗透雕文

更大的魔法渗透雕文

更强大的能力印记

更强大的能力印记

更强大的能力印记

更大的盔甲印章

更大的盔甲印章

更大的盔甲印章

更大的盔甲印章

更大的盔甲印章

更大的盔甲印章

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

魔术渗透的更大标志

而我想要的就是这样的输出

美联社

3倍能力的精髓

2x更强的能力雕文

1x更强的魔法抗性雕文

6x更大的魔法渗透雕文

3倍强大的能力印记

6x强效护甲

9倍魔法渗透的更大标记

我该怎么做呢?

Jon*_*eet 7

我建议使用LINQ对它们进行分组和计数:

// TODO: Build up the whole string, and set the Text property once.
// Oh, and rename richTextBox1 to something more descriptive.
foreach (RunePage rune in runePages)
{
    if (rune.Slots != null)
    {
        var grouped = rune.Slots
             .GroupBy(slot => slot.RuneId)
             .Select(group => new { Name = staticApi.GetRune(RiotSharp.Region.lan, 
                                                             group.Key, RuneData.tags, 
                                                             Language.es_ES).Name),
                                    Count = group.Count() })
             .Select(pair => string.Format("{0}x {1}", pair.Count, pair.Name));
        richTextBox1.Text = string.Join("\n", grouped);
    }
    richTextBox1.Text = rune.Name + "\n" + richTextBox1.Text;
}
Run Code Online (Sandbox Code Playgroud)