public static void DoStuff()
{
Dictionary<string, int> myDict = new Dictionary<string, int> {};
Console.WriteLine("Enter m:");
int m = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("m="+m);
// Console.WriteLine(enteredSurname+": "+ enteredCode);
foreach (var p in pav)
{
int dif = 0;
code=ChangeToCode(p);
Console.WriteLine(p+": "+code);
dif = CodeSimilarity(enteredSurname, p);
myDict.Add(p, dif);
}
foreach (KeyValuePair<string, int> kvp in myDict.OrderByDescending(i=>i.Value))
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
Console.ReadKey();
}
我已经对字典进行了排序,我需要打印它的m项。例如,如果我输入m = 2,我必须打印两个第一项字典。我尝试添加k = 0并且while(k&lt; m)打印这些值,但这似乎不是正确的方法,因为它只打印字典m次。
答案 0 :(得分:4)
您可以使用Take
,这意味着完全相同:
foreach (var kvp in myDict.OrderByDescending(i=>i.Value).Take(m))
答案 1 :(得分:1)
如果达到m,你必须在循环内增加k变量并跳出循环。
int k = 0;
foreach (KeyValuePair<string, int> kvp in myDict.OrderByDescending(i=>i.Value))
{
if (k>=m)
break;
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
k++;
}
答案 2 :(得分:0)
试试这个
K是打印数量
var kvp = myDict.OrderByDescending(i=>i.Value).ToList();
for (int i=0;i<k;i++)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp[i].Key, kvp[i].Value);
}