如何在 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"
如何使用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
循环的输出)?或者如何修改现有的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<> 作为值?