【问题标题】:How to get Alternate elements using Enumerable in C#如何在 C# 中使用 Enumerable 获取备用元素
【发布时间】:2011-05-06 15:20:01
【问题描述】:

这是我的问题的延续:How to get reverse of a series of elements using Enumarable in C#?

现在我只需要备用元素。这是我使用for 循环的解决方案:

int Max = 10;
int limit = 5;
Dictionary<String , String> MyDict = new Dictionary<string,string>();
int j = 0;
for (int i = 0; i <Max; i++)
{
    if (i >= limit)
        MyDict.Add((i+1).ToString(), "None");
    else
        MyDict.Add((i+1).ToString(), j.ToString());
    j+=2;
}

输出是这样的

{ "1" "0"}
{ "2" "2"}
{ "3" "4"}
{ "4" "6"}
{ "5" "8"}
{ "6" "None"}
{ "7" "None"}
{ "8" "None"}
{ "9" "None"}
{ "10" "None"}

如何使用Enumarerable 或使用任何 LINQ 方法来执行此操作。也和我之前的问题相反:How to get reverse of a series of elements using Enumarable in C#?

【问题讨论】:

    标签: c# linq lambda enumerable


    【解决方案1】:

    我认为没有标准的 LINQ 方法可以做到这一点。但是您可以创建自定义 IEnumerable 扩展方法来执行此类操作。

    http://msdn.microsoft.com/en-us/library/cc981895.aspx

    替代元素是这里的示例之一。基本上,它只是将您的示例代码打包为扩展,以便您获得所需的语法。

    【讨论】:

      【解决方案2】:
      int max = 10;
      int limit = 5;
      
      var dict = Enumerable.Range(1, max)
                           .ToDictionary(x => x.ToString(),
                                         x => (x > limit) ? "None"
                                                          : ((x - 1) * 2).ToString());
      

      【讨论】:

        【解决方案3】:

        您可以使用标准 LINQ Where 扩展方法作为执行所需操作的基础。

        给定IEnumerable&lt;T&gt; 的列表,它会像这样工作:

        var evens = list.Where((t, i) => i % 2 == 0);
        var odds = list.Where((t, i) => i % 2 == 1);
        

        希望你能在这些基础上做你想做的事。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-02
          • 1970-01-01
          • 2016-12-12
          • 2011-05-20
          相关资源
          最近更新 更多