(反対票には説明が必要です)
簡単な質問: 私の Linq のどこが悪いのですか? リストの値をそのインデックスに置き換えたい。私が思ったように簡単です:
var dd = myList.Select((x, i) => new {x=i});
dd
空です。私は Linq の専門家ではなく、Linq の仕組みを学んでいます。
コレクションの変更に 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();
コレクションの変更に 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);
var dd = myList.Select(i => myList.IndexOf(i));
これでうまくいくはずです