Как получить альтернативные элементы, используя перечисленные в C#

StackOverflow https://stackoverflow.com/questions/4123685

  •  29-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Учитывая список IEnumerable<T> это сработает так:

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

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

Другие советы

int max = 10;
int limit = 5;

var dict = Enumerable.Range(1, max)
                     .ToDictionary(x => x.ToString(),
                                   x => (x > limit) ? "None"
                                                    : ((x - 1) * 2).ToString());

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top