ChristinaB Geschrieben 17. März 2010 Geschrieben 17. März 2010 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 Zitieren
Guybrush Threepwood Geschrieben 17. März 2010 Geschrieben 17. März 2010 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. Zitieren
El Ninjo Geschrieben 17. März 2010 Geschrieben 17. März 2010 Das kann z.B. hiermit Array.FindAll(T)-Methode (System) realisiert werden. Zitieren
Guybrush Threepwood Geschrieben 17. März 2010 Geschrieben 17. März 2010 Naja das hilft dir nur wenn du wissen möchstest wie oft ein bestimmtes Element in dem Array vorkommt, bzw. wie oft da Elemente drin vorkommen die den Kriterien entsprechen. Aber nicht wenn du wie hier quasi eine Gruppierung schaffen willst. Zitieren
ChristinaB Geschrieben 17. März 2010 Autor Geschrieben 17. März 2010 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 Zitieren
ChristinaB Geschrieben 17. März 2010 Autor Geschrieben 17. März 2010 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 -.- Zitieren
Guybrush Threepwood Geschrieben 17. März 2010 Geschrieben 17. März 2010 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. Zitieren
ChristinaB Geschrieben 17. März 2010 Autor Geschrieben 17. März 2010 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=) Zitieren
Guybrush Threepwood Geschrieben 17. März 2010 Geschrieben 17. März 2010 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] Zitieren
ChristinaB Geschrieben 18. März 2010 Autor Geschrieben 18. März 2010 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=( Zitieren
Pointerman Geschrieben 18. März 2010 Geschrieben 18. März 2010 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 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. Zitieren
ChristinaB Geschrieben 18. März 2010 Autor Geschrieben 18. März 2010 So wies aussieht hab ich es geschafft... danke für die Hilfe=) Zitieren
Pointerman Geschrieben 18. März 2010 Geschrieben 18. März 2010 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. Zitieren
ChristinaB Geschrieben 18. März 2010 Autor Geschrieben 18. März 2010 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 Zitieren
ChristinaB Geschrieben 18. März 2010 Autor Geschrieben 18. März 2010 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=)^^ Zitieren
Guybrush Threepwood Geschrieben 18. März 2010 Geschrieben 18. März 2010 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] Zitieren
ChristinaB Geschrieben 18. März 2010 Autor Geschrieben 18. März 2010 Dim dict As New Dictionary(Of String, String) For i = 0 To MerkenArray.length - 1 Step i + 1 If dict.ContainsKey(MerkenArray(i)) Then j = j +1 dict(MerkenArray(i)) = j Else j = 1 dict(MerkenArray(i)) = j End If Next So stimmts=) Zitieren
Empfohlene Beiträge
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.