-3

(反対票には説明が必要です)

簡単な質問: 私の Linq のどこが悪いのですか? リストの値をそのインデックスに置き換えたい。私が思ったように簡単です:

var dd = myList.Select((x, i) => new {x=i});

dd空です。私は Linq の専門家ではなく、Linq の仕組みを学んでいます。

4

3 に答える 3

1

コレクションの変更に linq を使用しないでください。Linq はクエリ用であり、コレクションを変更するようには設計されていません。

LINQ =>言語統合クエリ

「Q」は「クエリ」の略です。

そして、あなたの質問については、意味がないと思います。インデックスは「0 - count-1」になります

var dd = Enumerable.Range(0, myList.Count).ToList();

これはそうすべきです。


私はあなたがこれを意味すると思いますか?

var dd = myList.Select((x, i) => new { Value = x, Index = i}).ToList();
于 2013-11-13T13:41:37.693 に答える
1

コレクションの変更に Linq を使用しないでください。インデックスを使用Selectして新しいリストを作成するために使用できます。

var dd = myList.Select((x, i) => i).ToList();

ご意見について

it インデックスに基づいて x の値を操作したい。

これは通常foreachループで行われますが、使用することは可能ですSelect

var dd = items.Select((x, i) => i % 42 == 0 ? 10 : x);

またはより一般的に

public static class EnumerableExtensions
{
    public static IEnumerable<T> Replace<T>(
        this IEnumerable<T> collection,
        Func<T, bool> predicate,
        T value
    )
    {
        return collection.Select((x, i) => predicate(x) ? value : x);
    }

    public static IEnumerable<T> Replace<T>(
        this IEnumerable<T> collection,
        Func<T, int, T> predicate,
        T value
    )
    {
        return collection.Select((x, i) => predicate(x, i) ? value : x);
    }
}

var dd = items.Replace((x, i) => i % 42 == 0, 10);
于 2013-11-13T13:46:40.847 に答える
-1
var dd = myList.Select(i => myList.IndexOf(i));

これでうまくいくはずです

于 2013-11-13T13:39:04.667 に答える