1

タプルのリスト内の同じタプル内の別のアイテムの値を見て、アイテムの値を取得しようとしています。最終的に行う必要があるのは、特定の Item2 を持つすべてのタプルを取得し、その選択から最新の DateTime を選択して、Item1 を取得することです。

たとえば、最終的に "Programmer グループから最新の名前を取得したい場合、"Programmer" と表示されているすべての Item2 を取得するロジックを期待し、最新の日付を持つものを確認し、"Stan" を出力します。 6/25 は 6/20 より新しいです。

    List<Tuple<string, string, DateTime>> myList;
    myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", 6/20/2013));
    myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", 6/25/2012));
    myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", 6/20/2013));
4

2 に答える 2

2
List<Tuple<string, string, DateTime>> myList = new List<Tuple<string,string,DateTime>>();

myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", new DateTime(2013,6,20)));
myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", new DateTime(2013, 6, 25)));
myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", new DateTime(2013, 6, 20)));

var result = myList.Where(x => x.Item2.Equals("Programmer")).OrderByDescending(x => x.Item3).Take(1);
于 2013-06-20T17:49:13.327 に答える
2

これは、LINQ を使用したかなり単純な操作です。最初のステップは、リストを DateTime (Item3) で並べ替えることです。その後First()、クエリをチェーンするだけで、最新のアイテムが返されます。LINQ 操作はインプレースで実行されないことに注意してください。つまり、アイテムの順序はmyListこの操作の影響を受けません。IEnumerable順番に新しいものを作成し、tuple.Item3そこから最初のアイテムを提供します。

Tuple<string, string, DateTime> mostRecent = myList.Orderby(x => x.Item3).First();

グループに制限を追加するには、where 句を追加するだけです。

Tuple<string, string, DateTime> mostRecent = myList.Where(y => y.Item2 == "Programmer").Orderby(x => x.Item3).First();

LINQ to Objects クエリ演算子に関するドキュメントを確認することをお勧めします。私が使用したものはすべて標準のクエリ演算子であり、最新の C# コード ベースのいたるところでそれらを目にするでしょう。Select、Where、OrderBy、ThenBy、そしておそらく Join や SelectMany などの標準的なクエリ演算子の使用方法を理解すれば、コレクションの操作にはるかに習熟できるようになります。

于 2013-06-20T17:41:03.310 に答える