如何在 C# 中使用 Enumerable 获取备用元素
Posted
技术标签:
【中文标题】如何在 C# 中使用 Enumerable 获取备用元素【英文标题】:How to get Alternate elements using Enumerable in C# 【发布时间】: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#?
【问题讨论】:
【参考方案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<T>
的列表,它会像这样工作:
var evens = list.Where((t, i) => i % 2 == 0);
var odds = list.Where((t, i) => i % 2 == 1);
希望你能在这些基础上做你想做的事。
【讨论】:
以上是关于如何在 C# 中使用 Enumerable 获取备用元素的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 C# 中使用 Enumerable.Repeat 方法重复 Func<T, T> ?
c# Enumerable中Aggregate和Join的使用
Enumerable.First (System.Linq) C# 的替代方案
C#开发的OpenRA的Enumerable.Concat方法应用