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