public RatingScope <T> GetTopPercentage(string ratingName, int top) { RatingScope <T> result = new RatingScope <T>(Name); RatingScope <T> radixStuds = new RatingScope <T>(Name); decimal filterPercentage = top; //把有那項排名的學生獨立出來。 foreach (T each in _students.Values) { PlaceCollection places = GetPlaceCollection(each); if (places.Contains(ratingName)) { radixStuds.Add(each); } } //計算要取的 Percentage。 decimal extractPlace = Math.Ceiling((filterPercentage / 100m) * radixStuds.Count); foreach (T each in radixStuds) { PlaceCollection places = GetPlaceCollection(each); if (places[ratingName].Level <= extractPlace) { result.Add(each); } } //之前的取百分比名次做法。 //foreach (RatingStudent each in students) //{ // if (each.Places.Contains(ratingName)) // { // Place p = each.Places[ratingName]; // decimal percentage = (100m * ((decimal)p.Level / (decimal)p.Radix)); // if (percentage <= 0) percentage = 1; // if (percentage <= filterPercentage) // { // result.Add(each); // } // } //} return(result); }
/// <summary> /// 取得前 n 名次的學生。 /// </summary> /// <param name="ratingName">排名的名稱,例如:國文。(與IScoreParser 實作之實體 Name 屬性值相同)</param> /// <param name="top">要取得名次。</param> /// <param name="placeNamespace">名次存放的 Namespace。</param> public RatingScope <T> GetTopPlaces(string ratingName, int top) { RatingScope <T> result = new RatingScope <T>(Name); foreach (T each in _students.Values) { PlaceCollection places = GetPlaceCollection(each); if (places.Contains(ratingName)) { if (places[ratingName].Level <= top) { result.Add(each); } } } return(result); }