如何在 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&lt;T&gt; 的列表,它会像这样工作:

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方法应用

C#开发的OpenRA的Enumerable.Concat方法应用

为啥我的 C# Xml 代码仅在我枚举变量 enumerable 时才有效