我是新编程的,有这个问题,我无法得到我想要做的,这是我的代码
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;
}输出:
接入点 能力力量的更大精髓 能力力量的更大精髓 能力力量的更大精髓 更大的能力雕文 更大的魔法抵抗雕文 更大的能力雕文 更大的魔法渗透铭文 更大的魔法渗透铭文 更大的魔法渗透铭文 更大的魔法渗透铭文 更大的魔法渗透铭文 更大的魔法渗透铭文 更大的能力封印 更大的能力封印 更大的能力封印 装甲的大封口 装甲的大封口 装甲的大封口 装甲的大封口 装甲的大封口 装甲的大封口 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记 魔法穿透的更大标记
我想要的就是这样的输出
接入点 3x能力力量的精髓 2 x超能力雕文 1x大字形魔法抗蚀剂 6x魔穿透的大字形 3x超能力封口 6x装甲大密封 9x魔法穿透的更大标记
我该怎么做?
发布于 2014-08-03 20:29:53
与LINQ不同,您可以使用简单的字典,如下所示:
var runeTotals = new Dictionary<string, int>();
foreach(RuneSlot runeSlot in rune.Slots)
{
var runeName = staticApi.GetRune(RiotSharp.Region.lan, runeSlot.RuneId, RuneData.tags, Language.es_ES).Name;
if (runeTotals.ContainsKey(runeName))
{
runeTotals[runeName] += 1;
continue;
}
runeTotals.Add(runeName, 1);
}
foreach (var runeTotal in runeTotals)
{
richTextBox1.Text = runeTotal.Value + "x " + runeTotal.Key + "\n" + richTextBox1.Text;
}如果列出的项更多,则可以将字典保持全局,并在添加或删除项时对其进行更新。
发布于 2014-08-03 19:06:17
我建议使用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;
}发布于 2014-08-03 19:08:56
你可以用林克。如果您从未使用过它,那么它可能看起来很复杂,但它比使用更经典的字典和手工约简方法更简单。
public IEnumerable<String> GetRuneStrings()
{
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;
yield return runeName;
}
}
yield return rune.Name;
}
}
public IEnumerable<String> GetAggregatedRuneStrings()
{
return GetRuneStrings().
GroupBy(runeStr => runeStr).
Select(runeStrGroup => String.Format("{0} x {1}", runeStrGroup.First(), runStrGroup.Count()));
}
public void AddRuneStringsToRichTextBox()
{
richTextBox1.Text += String.Join(Environment.NewLine, GetAggregatedRuneStrings().ToArray());
}https://stackoverflow.com/questions/25107984
复制相似问题