BenFradet / RiotSharp

C# wrapper for the Riot Games API
http://benfradet.github.io/RiotSharp/
MIT License
300 stars 145 forks source link

Optimizing obtaining most played champions in last 100 games #704

Open hermderger opened 2 years ago

hermderger commented 2 years ago

Is there a more efficient way to obtain the top 6 most played champions of a summoner using their Summoner Name and Region from their last 100 games?

Here is what I am currently using but it's very slow:

List<int> playedChampionIds = new List<int>();
summoner = api.Summoner.GetSummonerByNameAsync(selectedSpecificRegion, name).Result;
var matchListOfSummoner = api.Match.GetMatchListAsync(selectedBroadRegion, summoner.Puuid, null, 100).Result;
foreach (var m in matchListOfSummoner)
{
    var matchData = api.Match.GetMatchAsync(selectedBroadRegion, m).Result;
    var summonerMatchData = matchData.Info.Participants.FirstOrDefault(p => p.SummonerId == summoner.Id);
    if (summonerMatchData != null)
    {
        playedChampionIds.Add(summonerMatchData.ChampionId);
    }
}          

var mostPlayed = (from c in playedChampionIds
                group c by c into grp
                orderby grp.Count() descending
                select grp.Key).Take(6);
xXLAOKOONXx commented 2 years ago

Based on available endpoints there is no more efficient way. You might want to go for an asynchronous approach. This could increase performance for the stake of much more complicated handling. If you want to get the last 100 ranked games you should add those filters in the matchlist request.