Zum Inhalt springen

Array inhalt vergleichen und zählen


ChristinaB

Empfohlene Beiträge

Hey weiß jemand von euch wie ich es am besten hinbekomme in meinem Array wo z.b.

123456

124567

123456

123456

123567

drin steht, wie ich da dann zählen kann wie öft die gleiche Zahl vorkommen.

Meine Vorstellung war es das Array einfach mit sich selbst vergleichen und wenn die leiche Zahl vorkommt mir irgendwo eine 1 merken und den inhalt aber irgendwie bekomm ich es nicht gebacken.

Ich hoffe ihr versteht mich was ich meine.

Am Ende sollte dann in einem Array stehen

Dim Profilnummer


Profilnummer(0) = "Es werden 3 Profile von der Nummer 123456 benötigt"

Profilnummer(1) = "Es werden 2 Profile von der Nummer 123567 benötigt"

grüßle

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Einfachste dürfte wohl sein einfach ein Dictionary mit der dem Array Item als Key und der Anzahl als Value zu verwenden. Dann läufst du einfach mit ner Schleife über das Array und aktualisierst dein Dictionary entsprechend.

Kannst du mir das ein bisschen genauer erklären??? ich versteh das Dictionary nicht...

sorry

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habs jetzt so versucht

For i = 0 To MerkenArray.length - 1 Step i + 1

For j = 1 To MerkenArray.length - 1 Step j + 1

If MerkenArray(i) = MerkenArray(j) Then

k = k + 1

Point(i, i) = MerkenArray(i)

Point(i, i + 1) = k

End If

Next

Next

dennoch kann ich ja von meinem blöde zweidiemensionalem array nicht die vordere dimension verändern das wäre nämlich perfekt dann hätte ich das ja -.-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Dictionary Element besteht immer aus einem Schlüssel und einem Wert.

Wenn jetzt dein Array Strings enthält ist der Schlüssel des Dictionarys auch ein String und der Wert eine Zahl um die Anzahl der Vorkomnisse im Array zu merken.

Dictionary<string, int> dict = new Dictionary<string,int>();

Wenn du jetzt mit der Schleife über dein Array läufst schaust du für jedes Element ob sich das schon in deinem Dictionary befindet. Wenn nicht dann fügst du es hinzu und setzt die Anzahl auf 1. Wenn es sich schon im Dictionary befindet erhöhst du einfach nur die Anzhal um 1.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Dictionary Element besteht immer aus einem Schlüssel und einem Wert.

Wenn jetzt dein Array Strings enthält ist der Schlüssel des Dictionarys auch ein String und der Wert eine Zahl um die Anzahl der Vorkomnisse im Array zu merken.

Dictionary<string, int> dict = new Dictionary<string,int>();

Wenn du jetzt mit der Schleife über dein Array läufst schaust du für jedes Element ob sich das schon in deinem Dictionary befindet. Wenn nicht dann fügst du es hinzu und setzt die Anzahl auf 1. Wenn es sich schon im Dictionary befindet erhöhst du einfach nur die Anzhal um 1.

hey kannst du mir vielleicht noch kurz sagen wie ich des value abrufen kann?


        For i = 0 To MerkenArray.length - 1 Step i + 1

            k = 1

            For j = 1 To MerkenArray.length - 1 Step j + 1

                If MerkenArray(i) = MerkenArray(j) Then

                    k = k + 1


                End If

            Next

            If openWith.Values(MerkenArray(i)) = MerkenArray.length Then

            Else

                openWith.Add(MerkenArray(i), k)

            End If


        Next

der soll ja nicht nochmal eintragen wenn des array schon überprüft worden is und fertig=)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Damit ich endlich mal wieder was anderes als Java oder Flex (würg) machen kann hier das ganze als C# Beispiel:

static void Main(string[] args)
{
List<string> list = new List<string>() { "1", "2", "3", "1", "2", "1", "2", "2", "3", "1", };
Dictionary<string, int> dict = new Dictionary<string, int>();

for (int i = 0; i < list.Count; ++i)
{
if (dict.ContainsKey(list[i]))
{
dict[list[i]]++;
}
else
dict[list[i]] = 1;
}

foreach (KeyValuePair<string, int> p in dict)
{
Console.WriteLine("{0}: {1}", p.Key, p.Value);
}
Console.ReadKey();
}[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Leider muss ich nochmal nerven, ich bekomm es einfach nicht in VB übersetzt.

Hab es soweit hinbekommen:

Dim dict As New Dictionary(Of String, String)

For i = 0 To MerkenArray.length Step i + 1

If dict.ContainsKey(MerkenArray(i)) Then

k = k + 1

dict.Add(MerkenArray(i), k)

Else

k = 1

dict.Add(MerkenArray(i), k)

End If

Next

For Each KeyValuePair In dict

Console.WriteLine("{0}: {1}", dict.Keys, dict.Values)

Next

Console.ReadKey

Naja ganz stimmt das aber auch nicht.

Genauer gesagt komm ich auf das hier nicht klar:

if (dict.ContainsKey(list))

{

dict[list]++;

}

else

dict[list] = 1;

}

Sorry=(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

Ich moechte noch eine neue Idee auf den Markt werfen, die sehr einfach zu implementieren ist:

1. Array sortieren

2. Alle Elemente durchlaufen und dabei

a) einen Zaehler hochzaehlen

B) merken, was das aktuelle Element ist zb: 123456

c) wenn der Wert des Elements wechselt, hast Du das aktuelle Element und die Anzahl der Elemente. Den Zaehler wieder zuruecksetzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab meine Idee mal umgesetzt:

        Dim elemente() As Integer = {1, 2, 3, 4, 2, 8, 2, 3, 8, 1, 1}


        Array.Sort(elemente)

        Dim zaehler As Integer = 0

        Dim zuZaehlen As Integer = elemente(0)

        For index As Integer = 0 To elemente.Length - 1

            If (elemente(index) <> zuZaehlen) Then

                Console.Out.WriteLine("Element " + zuZaehlen.ToString() + " kommt " + zaehler.ToString() + " mal vor.")

                zaehler = 1

                zuZaehlen = elemente(index)

            Else

                zaehler = zaehler + 1

            End If

        Next

        Console.Out.WriteLine("Element " + elemente(elemente.Length - 1).ToString() + " kommt " + zaehler.ToString() + " mal vor.")

@Christina

Wie hast Du es jetzt geloest? Poste doch Deine Loesung, damit auch andere etwas davon haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meine Umsetzung:

Mein Array -> MerkenArray wir etwas weiter oben beschrieben mit verschiedenen Zahlen.


 Dim dict As New Dictionary(Of String, String)



        For i = 0 To MerkenArray.length - 1 Step i + 1

            If dict.ContainsKey(MerkenArray(i)) Then


                dict(MerkenArray(i)) = j + 1


            Else

                j = 1

                dict(MerkenArray(i)) = j

            End If

        Next

Ausgeben tu ich es dann so:
 For i = 0 To dict.Count - 1 Step i + 1

            Form1.TextBox3.Text &= dict.Values(i) & " mal " & dict.Keys(i) & "  Profile" & System.Environment.NewLine

        Next

Grüßle

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meine Umsetzung:

Mein Array -> MerkenArray wir etwas weiter oben beschrieben mit verschiedenen Zahlen.


 Dim dict As New Dictionary(Of String, String)



        For i = 0 To MerkenArray.length - 1 Step i + 1

            If dict.ContainsKey(MerkenArray(i)) Then


                dict(MerkenArray(i)) = j + 1


            Else

                j = 1

                dict(MerkenArray(i)) = j

            End If

        Next

Ausgeben tu ich es dann so:
 For i = 0 To dict.Count - 1 Step i + 1

            Form1.TextBox3.Text &= dict.Values(i) & " mal " & dict.Keys(i) & "  Profile" & System.Environment.NewLine

        Next

Grüßle

Ich glaub aber das ich bei der oberen Schleife einen Denfehler habe, kann dass sein. nur irgendwie Funktioniert es bei mir=)^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nachdem ich mir gestern nochmal kurz Gedanken drüber gemacht habe ist mir auch die moderne Lösung eingefallen ;)

static void Main(string[] args)
{
List<string> list = new List<string>() { "1", "2", "3", "1", "2", "1", "2", "2", "3", "1", };

var groups = from l in list
group l by l into g
select new {Number = g.Key, Count = g.Count() };
foreach (var item in groups)
{
Console.WriteLine("{0}: {1}", item.Number, item.Count);
}
Console.ReadKey();
}[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...