C# :: Aufgabe #102 :: Lösung #2

10 Lösungen Lösungen öffentlich
#102

Das Häufigste Element in einem Array

Anfänger - C# von klhlubek19 - 16.07.2015 um 13:46 Uhr
Schreiben Sie ein Programm, das aus einem Array das häufigste Element findet. Sollte es mehrere gleicher Anzahl finden, so darf irgend ein Element dieser Häufigsten ausgegeben werden.
#2
vote_ok
von Mexx (2370 Punkte) - 17.07.2015 um 14:54 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Häufigstes_Element_in_Array
{
    class Program
    {
        static void Main(string[] args)
        {
            // Testarrays anlegen
            string[] teststrings = new string[] { "ab", "bb", "cc", "ab", "de", "aa", "bb", "ef", "xy", "aa", "ca", "ca", "ac", "aa", "yy", "gh", "gf", "bb", "ax", "za", };
            int[] testzahlen = new int[] { 1, 2, 0, 1, 7, 5, 6, 6, 0, 7, 5, 9, 3, 7, 6, 1, 4, 9, 7, 4, 3, 2, 5, 6, 6, 8, 2, 7, 6, 1, 6 };
            Testklasse[] test = new Testklasse[] { new Testklasse(1, 2), new Testklasse(3, 2), new Testklasse(2, 2), new Testklasse(1, 2), new Testklasse(1, 2), new Testklasse(2, 2), };
            
            // Methode testen
            string str = (string)GetElement(teststrings);
            int zahl = (int)GetElement(Array.ConvertAll(testzahlen, new Converter<int, object>(IntegerToObject)));
            Testklasse t = (Testklasse)GetElement(test);
        }

        /// <summary>
        /// Gibt das erste gefundene Elemen der am häufigsten vorkommenden Elemente eines Arrays als Objekt zurück
        /// </summary>
        /// <param name="array">Das zu überprüfende Array (Arrays mit Zahlenwerten müssen explizit konvertiert werden)</param>
        /// <returns>Das am Häufigsten vorkommende Objekt (muss wieder in seinen ursprünglichen Datentyp umgewandelt werden)/returns>
        private static object GetElement(object[] array)
        {
            object obj = null;
            Hashtable ht = new Hashtable();
            foreach (object o in array)
                if (ht.ContainsKey(o))
                    ht[o] = (int)ht[o] + 1;
                else
                    ht.Add(o, 1);

            int maxAnzahl = ht.Values.Cast<int>().Max();
            foreach (DictionaryEntry entry in ht)
                if ((int)entry.Value == maxAnzahl)
                {
                    obj = entry.Key;
                    break;
                }

            return obj;
        }

        private static object IntegerToObject(int i)
        {
            return (object)i;
        }
    }

    /// <summary>
    /// Testklasse
    /// </summary>
    class Testklasse
    {
        int a;
        int b;

        public Testklasse(int a, int b)
        {
            this.a = a;
            this.b = b;
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben