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

如何在C#中使用可枚举性来获得一系列元素的反向?

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

    我有两个整数变量

    int Max = 10;
    int limit = 5;
    

    还有一本字典

    Dictionary<String , String> MyDict = new Dictionary<string,string>();
    

    Max 如果索引大于或等于 limit 则该值应为“无”。

    int j = 1;
    for (int i = Max-1; i >= 0; i--)
    {
        if (i >= limit)
            MyDict.Add((j++).ToString(), "None");
        else
            MyDict.Add((j++).ToString(), i.ToString());
    }
    

    所以结果会是

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

    如何使用 LINQ LAMBDA Expression

    相反,可以使用 Enumarable

    MyDict  = Enumerable.Range(0, Max)
                        .ToDictionary(X => (X + 1).ToString(), X => X >= limit ? "None" : X.ToString());
    

    此表达式的输出

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

    但是如何做相反的事情(比如 for 林肯 ?

    1 回复  |  直到 10 年前
        1
  •  3
  •   Itay Karo    14 年前
    Enumerable.Range(0, Max).OrderByDescending(x => x).ToDictionary(x => (Max - x).ToString(), x => x >= limit ? "None" : x.ToString());