2010-11-08 3 views
1

Ceci est la suite de ma question: How to get reverse of a series of elements using Enumarable in C#?Comment obtenir des éléments alternatifs en utilisant Enumerable en C#

Maintenant, je besoin d'éléments de rechange seulement. Voici ma solution en utilisant la boucle 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; 
} 

La sortie est comme

{ "1" "0"} 
{ "2" "2"} 
{ "3" "4"} 
{ "4" "6"} 
{ "5" "8"} 
{ "6" "None"} 
{ "7" "None"} 
{ "8" "None"} 
{ "9" "None"} 
{ "10" "None"} 

Comment faire en utilisant Enumarerable ou en utilisant une méthode LINQ. Et aussi l'inverse comme ma question précédente: How to get reverse of a series of elements using Enumarable in C#?

Répondre

7

Vous pouvez utiliser la méthode d'extension standard LINQ Where pour effectuer ce dont vous avez besoin.

donné une liste de IEnumerable<T> cela fonctionnerait comme ceci:

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

Espérons que vous pouvez construire sur ces derniers pour faire ce que vous voulez.

0

Je ne pense pas qu'il existe une méthode LINQ standard qui fait cela. Mais vous pouvez créer des méthodes d'extension IEnumerable personnalisées pour faire ce genre de chose.

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

éléments alternatifs est l'un des exemples ici. Fondamentalement, il suffit de prendre votre code d'exemple et l'empaquetant comme une extension afin que vous obteniez la syntaxe que vous voulez.

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()); 
Questions connexes