Ajouter une méthode médiane à une liste
Je voudrais remplacer la Liste d'objet en C# afin d'ajouter de la Médiane de la méthode comme la Somme ou la Moyenne. J'ai déjà trouvé cette fonction:
public static decimal GetMedian(int[] array)
{
int[] tempArray = array;
int count = tempArray.Length;
Array.Sort(tempArray);
decimal medianValue = 0;
if (count % 2 == 0)
{
//count is even, need to get the middle two elements, add them together, then divide by 2
int middleElement1 = tempArray[(count / 2) - 1];
int middleElement2 = tempArray[(count / 2)];
medianValue = (middleElement1 + middleElement2) / 2;
}
else
{
//count is odd, simply get the middle element.
medianValue = tempArray[(count / 2)];
}
return medianValue;
}
Pouvez-vous me dire comment faire cela?
source d'informationauteur Aladdin Gallas | 2011-03-11
Vous devez vous connecter pour publier un commentaire.
Utiliser une méthode d'extension, et de faire une copie de la saisie de tableau/liste.
Ne pas utiliser cette fonction. Il est profondément erronée. Check this out:
Les tableaux sont types de référence en C#. Il trie le tableau que vous lui donner, non pas une copie. L'obtention de la médiane d'un tableau ne doit pas modifier son ordre; il est peut-être déjà triés dans un ordre différent.
Utilisation
Array.Copy
d'abord faire une copie du tableau et puis trier les copie.J'ai serait certainement faire ces Les Méthodes D'Extension:
Vous pouvez ensuite utiliser ces méthodes de la façon suivante:
Mise à jour
Oh...et comme Eric mentionne, vous devriez trouver une autre mise en œuvre de la Médiane. Celui que vous avez fourni ne modifie pas seulement le tableau d'origine en place, mais, si je lis correctement, sera également de retour d'un nombre entier plutôt que de l'attendre décimal.
Vous ne voulez probablement pas à utiliser les trier pour trouver la médiane, car il y a des moyen plus efficace pour calculer autrement. Vous pouvez trouver le code pour ce qui ajoute également la Médiane comme méthode d'extension pour
IList<T>
dans ma réponse suivante:Calculer la médiane en c#
Vous pouvez créer une méthode d'extension pour le type de collection que vous voulez soutenir. Ensuite, vous serez capable de l'appeler, comme si sa partie de cette classe.
MSDN - Méthodes d'Extension de la documentation et des exemples
Moyenne et la somme sont les méthodes d'Extension disponible pour tout IEnumerable fournir la bonne transformation de la fonction en tant que paramètre MSDN
transformation va prendre un élément de collecte et de le transformer en un nombre décimal (averagable et comparables)
Je ne plongez pas ici dans le détail de la Médiane de la méthode de la mise en œuvre, mais ce n'est pas vraiment compliqué.
Edit: j'ai Vu que vous avez ajouté l'autre exigence de outputing une virgule à la moyenne.
PS: vérification des paramètres est ometted pour brievety.
Je vais faire quelques corrections à votre méthode:
remplacer ceci:
avec:
J'ai créé ma propre solution, j'ai de grandes tables dans SQL server et .ToList() et .ToArray() ne fonctionne pas bien (vous tirez sur toutes les lignes à partir de la base de données bofore faire autre chose, ce dont j'ai besoin est simplement la longueur des documents et moyen 1 ou 2 lignes (ou impair)
si quelqu'un intéressé, j'ai une version avec l'Expression renvoie TResult plutôt si décimal