所以我正在制造故障,我遇到了一个问题,就像我想要的那样显示数据。
这是我的代码(编辑只显示我的问题):
public string Formatsfunction(List<Metadata> mmds)
{
Dictionary<string, int> formatNumber = new Dictionary<string, int>();
foreach (Metadata mmd in mmds)
{
var type = mmd.Format.Type;
var found = formatNumber.ContainsKey(type);
if (found == true)
{
formatNumber[type]++;
}
else
{
formatNumber[type] = 1;
}
}
Console.WriteLine();
return null;
}
private string MeldingInformatie(string impact, string type, List<Metadata> mmds)
{
var temp = Formatsfunction(mmds);
var formats = mmds.Select(mmd => mmd.Format.Type +"("+temp+")");
...
}
我想要它做的是:
如果在Dictionary中有多个相同的类型,请将其写为:
狮子(3)熊(2)鱼(8)考拉(12)等
我想我已经有了一个良好的开端,但我不知道接下来该做什么。
你可能正在寻找这个:
返回null是非常无用的。您需要返回字典并使用它来格式化字符串。只需选择键(类型)并使用值格式化。使用string.Join将所有类型组合为一个字符串。
public Dictionary<string, int> Formatsfunction(List<Metadata> mmds)
{
Dictionary<string, int> formatNumber = new Dictionary<string, int>();
foreach (Metadata mmd in mmds)
{
var type = mmd.Format.Type;
var found = formatNumber.ContainsKey(type);
if (found == true)
{
formatNumber[type]++;
}
else
{
formatNumber[type] = 1;
}
}
Console.WriteLine();
return formatNumber;
}
private string MeldingInformatie(string impact, string type, List<Metadata> mmds)
{
var temp = Formatsfunction(mmds);
// (String interpolation is used)
var formats = temp.Keys.Select(type => $"{type}({temp[type]})");
return String.Join(" ", formats);
影响有什么作用?它可能无法解决所有问题,但可能会指向正确的方向。
使用LINQ的GroupBy()
,您可以编写整个方法,如:
public string Formatsfunction(List<Metadata> mmds)
{
return string.Join(" ",
mmds.GroupBy(mmd => mmd.Format.Type, (type, g) => $"{type}({g.Count()})"));
}
它通过mmds
属性对Format.Type
中的元素进行分组,并创建一个包含Type(count)
对的字符串。
谢谢你的帮助!结合你们给我的所有知识,我解决了这个问题。对于那些感兴趣的人,答案是:
public string Formatsfunction(List<Metadata> mmds)
{
Dictionary<string, int> formatNumber = new Dictionary<string, int>();
foreach (Metadata mmd in mmds)
{
var type = mmd.Format.Type;
var found = formatNumber.ContainsKey(type);
if (found == true)
{
formatNumber[type]++;
}
else
{
formatNumber[type] = 1;
}
}
var temp = formatNumber
.OrderByDescending(p=>p.Value)
.Select(mmd => mmd.Key +" ("+ mmd.Value+")");
string keyvalues = string.Join(", ", temp);
return keyvalues;
}
private string MeldingInformatie(string impact, string type, List<Metadata> mmds)
{
var temp = Formatsfunction(mmds);
var formats = mmds.Select(mmd => mmd.Format.Type +"("+temp+")");
var trackTrace = mmds.Select(mmd => mmd.TrackTrace);
string messageTypes = string.Join(", ", formats);
}
Output is now: Lion(8), Fish(7), Koala(6), Seagull(5), etc.
试试以下:
Dictionary<string, int> formatNumber = new Dictionary<string, int>() {
{"Lion",3},{"Bear",2},{ "Fish",8}, {"Koala", 12}};
Console.WriteLine(string.Join(" ", formatNumber.AsEnumerable().Select(x => string.Format("{0}({1})", x.Key, x.Value)).ToList()));