1

これは私の質問の続きです:C#でEnumarableを使用して一連の要素を逆にする方法は?

今、私は代替要素のみが必要です。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"}

EnumarerableLINQメソッドを使用または使用してこれを行う方法。また、前の質問のように逆になります。C#でEnumarableを使用して一連の要素を逆にする方法は?

4

3 に答える 3

8

必要なことを行うための基礎として、標準のLINQWhere拡張メソッドを使用できます。

それのリストが与えられると、次のIEnumerable<T>ように機能します。

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

うまくいけば、あなたはあなたが望むことをするためにこれらの上に構築することができます。

于 2010-11-08T12:20:34.950 に答える
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());
于 2010-11-08T12:19:53.257 に答える
0

これを行う標準のLINQメソッドはないと思います。ただし、この種のことを行うためのカスタムIEnumerable拡張メソッドを作成できます。

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

代替要素は、ここでの例の1つです。基本的には、サンプルコードを拡張としてパッケージ化するだけなので、必要な構文を取得できます。

于 2010-11-08T12:14:43.050 に答える