ある条件で注文された IQueryable があります。今、その IQueryable 内の特定の要素の位置を知りたいです。それを取得するためのlinq式はありますか。たとえば、IQueryable に 10 個の要素があり、6 番目の要素が条件に一致するとします。番号 6 を取得したいとします。
8475 次
3 に答える
16
最初に各アイテムをそのインデックスで選択し、次にアイテムをフィルタリングし、最後に元のインデックスを抽出します。
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
テスト ベッド:
class Program
{
static void Main(string[] args)
{
var orderedList = new List<string>
{
"foo", "bar", "baz", "qux", "quux",
"corge", "grault", "garply", "waldo",
"fred", "plugh", "xyzzy", "thud"
}.OrderBy(x => x);
// bar, baz, corge, foo, fred, garply, grault,
// plugh, quux, qux, thud, waldo, xyzzy
// Find the index of the first element beginning with 'g'.
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
Console.WriteLine("Index: " + index);
}
}
出力:
Index: 5
于 2009-12-08T19:47:47.223 に答える
2
のようなものを使用することもできますがquery.TakeWhile(x => !matchesCondition(x)).Count()
、それは前の値を列挙する効果があり、それはあなたが望むものではないかもしれません.
于 2009-12-08T19:44:04.167 に答える
0
述語関数のパラメーターとして、コレクション索引を含む「Where」関数のバージョンを使用することもできます。詳細については、 MSDNを参照してください。
var result = Enumerable.Range(0, 10).Where((x, i) => i == 6);
6番目の要素がない場合、バージョンによってリストが空になる可能性があります。また、結果を反復処理するまで、where句は評価されません。
于 2009-12-08T22:57:05.770 に答える