var MaleCount = students.Where(Std => Std.Gender.ToUpper() == "M").Count();
var FemaleCount = students.Where(Std => Std.Gender.ToUpper() == "F").Count();
//List for storing top students records
List<StudentEntity> TopStudents = new List<StudentEntity>();
//Adding records to List
if (MaleCount > 0)
{
var maxMarksM = students.Where(o => o.Gender.ToUpper() == "M").Max(o => o.Marks);
TopStudents = students.Where(o => o.Gender.ToUpper() == "M" && o.Marks == maxMarksM).ToList();
}
if (FemaleCount > 0)
{
var maxMarksF = students.Where(o => o.Gender.ToUpper() == "F").Max(o => o.Marks);
TopStudents.AddRange(students.Where(o => o.Gender.ToUpper() == "F" && o.Marks == maxMarksF).ToList());
}
return TopStudents;
答えて
免責事項を:それは問題だ 場合は、これを行うことができます。あなたは多分そのように連鎖し.GroupBy().Where()...
ソリューションを使用したくない場合は
:maleStudents
とfemaleStudents
に
スプリットstudents
を(Where()
を使用)。
これは、ifラッパーの必要性を排除し、男性と女性の生徒の行の周りのCount()
を削除します。
だから私の代わりには次のようになります。
var MaleStudents = students.Where(Std => Std.Gender.ToUpper() == "M");
var FemaleStudents = students.Where(Std => Std.Gender.ToUpper() == "F");
//List for storing top students records
List<StudentEntity> TopStudents = new List<StudentEntity>();
//Adding records to List
var maxMarksM = MaleStudents.Max(o => o.Marks);
TopStudents = MaleStudents.Where(o => o.Marks == maxMarksM).ToList();
var maxMarksF = FemaleStudents.Max(o => o.Marks);
TopStudents.AddRange(FemaleStudents.Where(o => o.Marks == maxMarksF).ToList());
return TopStudents;
最後の'ToList() 'は必要ないと思います。 –
そして私は、最初の2つの 'Where'の後に、'ToList() 'を書いたほうがいいと思います。 –
そして、最も重要なことに、MaleStudentsが空の場合、 'Max()'は失敗します。 –
var topStudents = allStudents
.GroupBy(s => s.Gender.ToUpper()) // Dividing the students to groups by gender
.Where(g => g.Key == "M" || g.Key == "F") // Including only the Male and Female genders
.Select(g => g.Where(s => s.Marks == g.Max(i => i.Marks))) // From each group, finding the highest mark and selecting from that groups all the student with that mark
.SelectMany(s => s) // selecting all the students from all the inner groups
.ToList();
編集:
@Alexey Subbotaはg.Maxは、それが不要な、我々だけではグループ内のすべての学生のために1回呼び出されます実際には、あまりにも何度も呼び出されるかもしれないことを示唆し グループごとに最大値を1回計算する必要があります。私はGroovyでプログラムが、それはこの場合の違いを作るべきではありません。
var topStudents = allStudents
.GroupBy(s => s.Gender.ToUpper()) // Dividing the students to groups by gender
.Where(g => g.Key == "M" || g.Key == "F") // Including only the Male and Female genders
.Select(g => new KeyValuePair<int, IEnumerable<Student>>(g.Max(s => s.Marks), g)) // Storing the group together with it's highest score value
.Select(g => g.Value.Where(s => s.Marks == g.Key)) // From each group, selecting the student that have the highest score
.SelectMany(s => s) // selecting all the students from all the inner groups
.ToList();
- 1. アクションデリゲートに(ラムダ式)文字列を解析する簡単な方法はありますか?
- 2. JAVA - このラムダ式を簡略化
- 3. この簡単な方法をもっと短くするには?
- 4. これはカレンダーのための最も簡単で簡単なアルゴリズムですか?
- 5. なぜこのJavaラムダ式パラメータにエラーがありますか?
- 6. モデル式にインターセプトだけがあるかどうかを判断するもっとも簡単な方法
- 7. なぜこのラムダ式を返すと文字列になりますか?
- 8. xugglerの簡単なチュートリアルはどこにありますか?
- 9. これは、foreachを使用するともっと簡単に書くことができますか?
- 10. UIButtonは、私が最も簡単なUIを持っていることに
- 11. もっと簡単なJavaScriptタイマーをお探しですか?
- 12. このブール式を簡単な形式で書き直すことはできますか?
- 13. ループのために使用するロジック。最も簡単なものと最も簡単なもの
- 14. Java Sudoku Generator(もっとも簡単な解決策)
- 15. 誰も簡単なタイプの単語リストを持っていますか?
- 16. (簡単なもの)が、私は(実際にはかなり簡単な)XsdContactsという名前の次のXMLスキーマを持っている要素の属性
- 17. このpython関数のラムダ式はどうなっていますか?
- 18. tfrecordsからバッチインプットを処理するもっと簡単な方法はありますか?
- 19. 非常に簡単な設定であっても、WebStormのブレークポイントにヒットすることはできません
- 20. Python WebDAVサーバーコードの方がこれよりも簡単ですか?
- 21. PowerShellを使ってGitをもっと簡単にする
- 22. これを行う簡単な方法はありますか?
- 23. roboguiceとandroidの断片を使った簡単な例はありますか?
- 24. このコードを簡略化する簡単な方法はありますか?誰かがコンマを説明することもできますか?
- 25. このheirarchicalテーブルをフラットテーブルに非正規化する最も簡単で簡単な方法は何ですか?
- 26. 簡単なテキストでもUITableViewのスクロールが遅くなります
- 27. 質問をアップロードするための形式の簡単な情報はどこにありますか?
- 28. 最も単純なJava、私は自転車と人間との簡単なコードを持っています
- 29. もっと簡単な方法がないデータフレームを変換
- 30. 私のC++デモをiPhoneに簡単に置くことは簡単ですか?
少なくとも、あなたは...(MaleCountとFemaleCount)...カウント – Spawn