Как получить альтернативные элементы, используя Enumerable в C # - PullRequest
1 голос
/ 08 ноября 2010

Это продолжение моего вопроса: Как получить реверс последовательности элементов, используя Enumarable в 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. А также наоборот, как мой предыдущий вопрос: Как получить обратный ряд элементов, используя Enumarable в C #?

Ответы [ 3 ]

8 голосов
/ 08 ноября 2010

Вы можете использовать стандартный метод расширения LINQ Where в качестве основы для выполнения того, что вам нужно.

При наличии списка IEnumerable<T> это будет работать так:

var evens = list.Where((t, i) => i % 2 == 0);
var odds = list.Where((t, i) => i % 2 == 1);

Надеюсь, вы сможете использовать их, чтобы делать то, что вы хотите.

2 голосов
/ 08 ноября 2010
int max = 10;
int limit = 5;

var dict = Enumerable.Range(1, max)
                     .ToDictionary(x => x.ToString(),
                                   x => (x > limit) ? "None"
                                                    : ((x - 1) * 2).ToString());
0 голосов
/ 08 ноября 2010

Я не думаю, что есть стандартный метод LINQ, который делает это. Но вы можете создавать собственные методы расширения IEnumerable, чтобы делать подобные вещи.

http://msdn.microsoft.com/en-us/library/cc981895.aspx

Альтернативные элементы - один из примеров здесь. По сути, он просто берет ваш пример кода и упаковывает его как расширение, чтобы получить нужный синтаксис.

...