Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

Quizz 3

L'idée ici est de faire du C#3, pas du C#2, tant pis pour la perf, ce n'est pas le but ici.

On a un IEnuemrable<int> et on veut récupérer pour chaque valeur de notre IEnumerable le nombre maximum d'occurences succésives.

Le code suivant :

static void Main(string[] args)

{

    var tab = new int[] { 3, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 3, 2, 2, 2, 2 };

    foreach (var v in SuccessiveIterationMax(tab).OrderByDescending(i => i.Value).ThenBy(i => i.Key))

        Console.WriteLine("{0} : {1}", v.Key, v.Value);

}

 

static IEnumerable<KeyValuePair<int, int>> SuccessiveIterationMax(IEnumerable<int> values)

{

  // Just code it Smile

}

donnera le résultat suivant :

2 : 4
1 : 3
3 : 1

Pourquoi ?

2 -> 4 :
3, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 3, 2, 2, 2, 2

1 -> 3 :
3, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 3, 2, 2, 2, 2

3 -> 1 :
3, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 3, 2, 2, 2, 2

Enjoy Smile

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié lundi 11 août 2008 13:32 par Matthieu MEZIL

Classé sous : , , ,

Commentaires

# re: Quizz 3 @ lundi 11 août 2008 16:08

bon la le quizz est clair

en C# 2.0 c'est assez facile, maintenant faut le faire en 3.5.....

on a le droit aux bloucles ?

FredD

# re: Quizz 3 @ lundi 11 août 2008 16:18

Tu peux faire ce que tu veux du moment que c'est du C#3. Je ne prétend pas avoir la meilleure solution possible donc tout est envisageable. Tu peux même rajouter une nouvelle méthode si tu veux.

Matthieu MEZIL

# re: Quizz 3 @ lundi 11 août 2008 17:19

var q = values.Select((value, index) => new KeyValuePair<int, int>(value, values.Skip(index).TakeWhile(i => value == i).Count())).GroupBy(o => o.Key).Select(o => o.OrderByDescending(p => p.Value).First());

cyril

# re: Quizz 3 @ lundi 11 août 2008 17:47

Bien joué Cyril Wink

Pour ma part je proposerais ça :

static IEnumerable<KeyValuePair<int, int>> SuccessiveIterationMax(IEnumerable<int> values)

{

    return from v in values.Distinct()

           let max = values.Select((value, index) => values.Skip(index).TakeWhile(v2 => v2 == v).Count()).Max()

           select new KeyValuePair<int, int>(v, max);

}

ou alors en un peu moins C#3 mais plus performant ça :

static IEnumerable<KeyValuePair<int, int>> SuccessiveIterationMax(IEnumerable<int> values)

{

    return from v in values.Distinct()

           select new KeyValuePair<int, int>(v, SuccessiveIterationLength(values, v).Max());

}

 

static IEnumerable<int> SuccessiveIterationLength(IEnumerable<int> values, int value)

{

    while (values.Any())

    {

        values = values.SkipWhile(v => v != value);

        int result = values.TakeWhile(v => v == value).Count();

        yield return result;

        values = values.Skip(result);

    }

    yield return 0;

}

Dans tous les cas bravo, très peu de développeurs ont fait attention au fait qu'il y avait deux méthodes Select : la classique + une avec l'index de la position courante.

Matthieu MEZIL

# re: Quizz 3 @ lundi 11 août 2008 17:50

On pourrait d'ailleurs directement faire ceci :

static void Main(string[] args)

{

    var tab = new int[] { 3, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 3, 2, 2, 2, 2 };

    foreach (var v in from v in tab.Distinct()

                      let max = tab.Select((value, index) => tab.Skip(index).TakeWhile(v2 => v2 == v).Count()).Max()

                      orderby max descending, v

                      select new KeyValuePair<int, int>(v, max))

        Console.WriteLine("{0} : {1}", v.Key, v.Value);

}

Matthieu MEZIL

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01