私は人の順序付きリストを持っています。私は、私が知っている人がそのコレクションに存在しています。どの人物がリストの次の人物であるかをどのように判断できますか?Linqを使用して、コレクション内の指定された要素の後にある要素を検索します。
答えて
あなたはこのような何かを行うことができます:
IEnumerable<Person> persons = ..
var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack")
.ElementAt(1); //Zero-indexed, means second
アイデアは、あなたが条件を満たしまでの要素をスキップして結果のシーケンスを生成することで、その後、その配列の第二の要素を取ります。
クエリが結果を返すという保証は(例えば一致するものが見つからない、またはシーケンスの最後の要素であるん)がない場合は、あなたがElementAtOrDefault
でElementAt
を交換して、チェックするためにnull
検定を行うことができます成功/失敗。
あなたの質問には、の注文番号人がいることがわかりました。その意味をより詳しく説明できれば、より良い答えが得られるかもしれません(例えば、シーケンスを線形検索する必要がないかもしれません)。
SkipWhile
は、述語を取り、述語が偽になるまですべてをスキップする方法です。その要素とそれ以降のすべてを返します。 isThePerson
var remainingPeople = collectionOfPeople.SkipWhile(p => !isThePerson(p));
if (remainingPeople.Count() == 1)
{
// the person was the last in the list.
}
var nextPerson = remainingPeople.Skip(1).First();
は、人を取り、それはあなたがそれ興味を持っている人であればtrueを返すメソッドです。
ここに2つの問題があります:1)*全体*ソースシーケンスの冗長列挙があります。 2) 'remainingPeople.Count()== 0 '、つまり条件が決して満たされないときには失敗します。 – Ani
1)シーケンス全体を2回列挙する場所がわかりません。どこを指摘できますか? 2)それがリストに含まれていない場合には失敗するが、要件にはその人がリストに含まれることが保証されているので問題はない。 –
ほとんどのLINQ演算子は遅延実行を使用することに注意してください。 'remainingPeople'は*クエリ*であり、リストや配列ではありません。結果は2回、 'Count()'と 'Skip(1).First()'に対して1回ずつ取得されます。 – Ani
- 1. 指定されたIDを持つ要素のelasticsearch検索
- 2. コレクションのコレクション内の要素を検索する
- 3. 指定されたZ-インデックスを持つ要素を検索
- 4. 、指定された要素
- 5. LINQ c#コレクション内の一意の要素
- 6. プロパティでコレクション内の要素を検索する方法は?
- 7. フェッチされ、パラメータとして渡される要素のIDを使用して要素内の要素を見つける方法はありますか?
- 8. Linqはあるコレクションから別のコレクションに要素を削除します
- 9. 検索された要素のレベルを決定する
- 10. スナップアニメーションを使用して指定された領域にSVG要素をスケーリング
- 11. shared_ptrコンテナ内の要素を検索していますか?
- 12. Linq to XML - 要素の検索
- 13. リストのリスト内の指定された要素を削除します。
- 14. XML:C#を使用して特定のテキストの要素を検索する
- 15. lxml:ツリー内の指定された要素から新しい要素ツリーを作成する方法
- 16. 各配列要素、左の小さな要素を検索します。 O(n)
- 17. DOMを変更した後の要素の検索
- 18. 指定された要素の子孫でないすべての要素を選択します。
- 19. Ocamlは、指定されたすべての要素をリスト内の指定された要素に置き換えます。
- 20. には、コレクションの各要素を検索する方法があります。#
- 21. クラスリスト内のクラス要素を検索
- 22. LinkedList内の要素を検索
- 23. javaの要素のプロパティを指定して、リスト内の要素を検索するにはどうすればよいですか?
- 24. C++述語を使用してタプルのリスト内の要素を検索
- 25. 複雑さがO(lgn)の指定された数を除いて、ソートされた配列内の要素を検索するアルゴリズムはありますか?
- 26. 検索後のISOtope要素の評価
- 27. ネストされたコンテナから要素のコレクションを返します
- 28. ツリーセット内の特定の要素を検索する
- 29. LINQからXMLへの要素の検索または作成
- 30. その要素の別の属性を検索して要素属性を検索する方法
ちょうど私にそれを打つ:-) – finnw
@finnw:我々は同じプロパティ名を選んだ。私たちが同じ人名を選んだのかどうかを想像してみてください。 :) – Ani
これは、一般的なLinq to Objectクエリの素晴らしい解決策ですが、 'SkipWhile'クエリ演算子はLinq to Sqlではサポートされていません。 –