Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Slav.Slavchev avatar Slav.Slavchev 25 Точки

Homework FunctionalProgramming -> Problem 12

Здравейте колеги :)

Имам малка нужда от помощ за 12та задача. Намерих следното решение на нея в интернет.

var weakStudents = students
    .Where(s => s.Marks.Aggregate(0, (counter, mark) => counter + (mark == 2 ? 1 : 0)) == 2) 
    .Select(s => s.FirstName + " " + s.LastName);

 Ако някой може да обясни как работи ще съм много благодарен :D (2ия ред ми е проблемния)

Може да споделите и вашите решения

ModEdit: Моля, прочетете правилата на форума....

Тагове:
0
C# OOP Basics 13/02/2015 00:56:05
Filkolev avatar Filkolev 4482 Точки

Вместо да опитваш да разбереш трудно разбираем код по-добре се помъчи сам да измислиш решение.

Това е доста объркващо - има ламбда функция в ламбда функция. Aggregate агрегира, като в counter брои оценките, които са двойки. Т.е. това нещо връща броя двойки, които има в масива с оценки на дадения студент. След това резултата от това агрегиране се гледа дали е 2 (търсим хората с точно две двойки) и тях ги филтрираме, като селектираме само пълните им имена. 

Аз също съм направил нещо подобно, но мисля, че е една идея по-разбираемо:

var studentsWithTwoLowMarks = students
     .Where(student => student.Marks.Count(mark => mark == 2) == 2)
     .Select(x => new { FullName = x.FirstName + " " + x.LastName, x.Marks });

Взимам Count на оценките, като на Count подавам ламбда функция да ми брои само оценките равни на 2.

1
kasskata avatar kasskata 492 Точки

Добро решение, Фил. Но не мисля че има смисъл от Select-a накрая. То ти връща всички ученици с 2 2ки, след .Where().ToList() и то прави лист от ученици. Вече можеш да си ги изплюеш. 

 

А Слав, ако трябва да сме точни става нещо такова.

var weakStudents = students
    .Where(s => s.Marks.Aggregate(0, (counter, mark) => counter + (mark == 2 ? 1 : 0)) == 2) 
    .Select(s => s.FirstName + " " + s.LastName);

Намери(аггрегирай) всички студенти с оценки с counter == 2.Това във вътрешнте скоби(mark == 1(return 1 демек като True или False(0))), това си е точно делегат което е подадено в този агрегат. Обаче Фил добре го каза и аз ще го кажа в стил Наков "Този метод го Бастисвам... return Bastiss;":D 

1
12/02/2015 23:59:59
Filkolev avatar Filkolev 4482 Точки

Учениците съдържат и други данни, а в условието се иска да върнем само част от тях (пълно име, което е комбинация от първо и второ от класа Student, и оценките), т.е. трябва да ползваме анонимен клас.

0
Slav.Slavchev avatar Slav.Slavchev 25 Точки

Благодаря ви много момчета :) Изключително ми бяхте полезни.

Filkolev твоето решение за мен е доста по-качествено заради по-добрата разбираемост.

Поздрави и на двамата

1
VenelinGrozev avatar VenelinGrozev 130 Точки

За 11та или за 12та задача питаш? Понеже това е решение на 11та.

 

11. Weak Students

Write a similar program to the previous one to extract the students with exactly two marks "2". Use extension methods.

 

12. Students Enrolled in 2014

Extract and print the Marks of the students that enrolled in 2014 (the students from 2014 have 14 as their 5-th and 6-th digit in the FacultyNumber).

 

 

0
Slav.Slavchev avatar Slav.Slavchev 25 Точки

Прав си колега (y) Моя е грешката -> задачата е 11та :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.