代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何在C中使用Enumerable获取可选元素#

  •  1
  • Thorin Oakenshield  · 技术社区  · 14 年前

    这是我问题的延续: 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方法。与我之前的问题相反: 如何使用C中的可枚举元素获得一系列元素的反转?

    3 回复  |  直到 11 年前
        1
  •  8
  •   Enigmativity    14 年前

    你可以使用标准的LINQ Where 扩展方法作为完成所需工作的基础。

    给出了一个 IEnumerable<T> 工作原理如下:

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

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

        2
  •  2
  •   LukeH    14 年前
    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
  •  0
  •   James Gaunt    14 年前

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

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

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