【问题标题】:convert for loop to the Linq lambda将 for 循环转换为 Linq lambda
【发布时间】:2013-05-08 22:58:55
【问题描述】:

如何将此循环转换为 Linq lambda。

我已经定义了一个字典

    var dictionary = new Dictionary<int, string>();
        dictionary.Add(1,"Test");
        dictionary.Add(2,"Test2");
        dictionary.Add(3,"Test3");
        dictionary.Add(4,"Test4");

并想通过它导航并根据数字值制作一个字符串

       int number = 10; // I am hard coded this number for this example
       string somevalue = string.Empty;
       int somekey = 0;

   foreach (var simple in dictionary )
         {
             while (number>=simple.Key)
             {
                  somevalue += simple.Value;
                  somekey -= simple.Key;
             }
         }
   }

简单的循环可以正常工作,并且会返回Test4Test4Test2,只需将其转换为 lambda 表达式。

【问题讨论】:

  • 这是什么语言?您不能将 += 与 C# 中的声明结合使用。
  • 它是 c# 。我只是用+= 做简单的字符串连接
  • 显然您的代码无效,无法编译。首先,正如递归所说,您不能在分配 value 之前使用它的值,这就是您尝试使用 += 运算符所做的事情,其次您是无限循环的,因为你永远不会改变“数字”的值。
  • 你说得对,我只是更新代码
  • @fatima:最后你还有一个额外的右花括号。如果你把它拿出来,你的while 循环是一个永远不会终止的无限循环。更新代码时,请尝试执行它以确保它运行。

标签: linq lambda


【解决方案1】:

我想你想要这个:

List<string> list = dictionary
   .Select(kv => string.Join("", Enumerable.Repeat(kv.Value, kv.Key)))
   .ToList();

和你一起采样:"Test"(如果键是 2,TestTest

但是,当键已经指示重复次数时,您的循环无法编译,并且不清楚您需要什么 number

【讨论】:

  • 感谢您的回复,我只是为我的问题添加了更多上下文。我尝试了您的解决方案,但没有得到预期的结果