如何在 C# 中使用 Ienumerable 反转一系列元素?

Posted

技术标签:

【中文标题】如何在 C# 中使用 Ienumerable 反转一系列元素?【英文标题】:How to get reverse of a series of elements using Enumarable in C#? 【发布时间】:2011-05-06 14:45:05 【问题描述】:

我有两个整数变量,比如

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" 

如何使用LINQLAMBDA 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 循环的输出)?或者如何修改现有的LINQ

提前致谢。

【问题讨论】:

你能澄清一下到底想要实现什么吗?您似乎在同一个问题中以两种不同的含义使用了“reverse”这个词。 【参考方案1】:
Enumerable.Range(0, Max).OrderByDescending(x => x).ToDictionary(x => (Max - x).ToString(), x => x >= limit ? "None" : x.ToString());

【讨论】:

你的同事或六个月大的自己会给你 -10 的单线

以上是关于如何在 C# 中使用 Ienumerable 反转一系列元素?的主要内容,如果未能解决你的问题,请参考以下文章

IEnumerable<T> 使用 c# 在函数内访问 T 的属性

在 C# 中:如何声明一个类型为键的通用字典,该类型的 IEnumerable<> 作为值?

如何在 C# 中将 IEnumerable<T> 转换为 List<T>?

C#中如何从 IEnumerable<T> 中取值?

c#接口公共私有[重复]

C# 使用IENUMERABLE,YIELD