2016-03-19 1 views
-4

Ich möchte damit beginnen, zu sagen, dass ich ein Anfänger in der Codierung in iOS bin (Swift 2.0). Ich habe also ein Array, das ich zuerst mit dem häufigsten Element und zuletzt mit dem kleinsten Element sortieren möchte. Ich möchte das dann in eine UITableView einfügen, wobei der häufigste Eintrag oben und der am wenigsten häufige unten angezeigt wird. Also, wenn ich einen Artikel namens "Food" im Array habe und er 3 Mal erscheint, sollte er über einem Gegenstand namens "Candy" stehen, der 2 Mal erscheint. Vielen Dank!Häufigstes Array-Element in tableView

EDIT: Es tut mir leid für eine so eine schlechte Frage, und wie ich schon sagte, ich bin ein Anfänger bei der Programmierung, so bin ich nicht der beste zu erklären meine Situation entweder. Aber ich werde versuchen, meine Situation diesmal besser zu beschreiben. Zuerst wollte ich mein Array mit dem häufigsten Element zuerst und das zweithäufigste Element danach sortieren und so weiter. Die Antwort, die von John zur Verfügung gestellt wurde mir geholfen, das zu tun, und danach habe ich es geschafft in eine Tableview wie folgt zu setzen:

var counts : Dictionary<String, Int> = Dictionary<String, Int>() 


override func viewDidLoad() { 

    for (_, value) in prioLista.enumerate() { 

     if let count = counts[value] { 

      counts[value] = count + 1 

     } 
     else { 
      counts[value] = 1 
     } 

    } 

    prioLista.sortInPlace { (first, second) -> Bool in 

     let firstCount = counts[first] 
     let secondCount = counts[second] 

     return firstCount > secondCount 
    } 

    navigationItem.title = "Spara" 

} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return prioLista.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cellster = tableView.dequeueReusableCellWithIdentifier("cellster") 


    cellster?.textLabel?.text = prioLista[indexPath.row] 

    return cellster! 
} 

Die Variable prioLista, die in dem Code enthalten ist, ist ein Array aus einer anderen Datei. Per Knopfdruck können Sie Strings hinzufügen.

My tableView after sorting elements after most common

Also das ist, wo ich jetzt bin, wie die Bildansichten. Der TableView sortiert die Elemente genau so, wie ich es wollte. Ich möchte jedoch nur eine Zeile pro Objekt haben. Wenn das Array also mehr "Mat" als "Godis" enthält, möchte ich immer noch, dass "Mat" über "Godis" steht, aber ich möchte, dass sie jeweils eine Zeile aufnehmen. Ab sofort zeigt das TableView jedes einzelne Element, das ich in meinem Array habe, und stattdessen möchte ich, dass es Duplikate entfernt, aber immer noch die gängigsten auf die weniger gebräuchlichen setzen. Ich weiß, dass es merkwürdig klingen mag, dass ich die Einzelteile entfernen möchte, aber immer noch die von John zur Verfügung gestellte Funktion verwende, aber wenn es eine Weise gibt, würde ich so glücklich sein.

Also jetzt zusammenzufassen, was ich eigentlich will, also mache ich das so klar wie möglich; In dem Bild, das ich verlinkt habe, sind meine Objekte nach ihrer Häufigkeit sortiert, und ich frage mich, ob es eine Möglichkeit gibt, nur eines der gleichen Objekte anzuzeigen, aber das Array auf diese Weise sortiert zu haben.

erste Reihe: Mat zweite Reihe: Godis

im

Tableview

Ich hoffe, dass ich klar genug war, und nur so, wenn es mehr „Mat“ als „Godis“ ist, soll es als angezeigt werden Zur Erinnerung, ich bin nur ein Anfänger, der versucht zu programmieren lernen :)

+0

Bitte beachten Sie, dass Sie hier keine vollständige Antwort erwarten können. Bitte beschreibe, wie viel du getan hast und wo du steckst. –

Antwort

0

Es gibt wahrscheinlich mehrere Ansätze, dies zu erreichen, aber hier ist ein Beispiel. Beginnen Sie damit, die Häufigkeit zu ermitteln, mit der eine Zeichenfolge im Array auftritt, und speichern Sie diese in einem Wörterbuch. Verwenden Sie dann das Wörterbuch, um das Array zu sortieren:

+0

Vielen Dank! Ich habe jetzt nur ein Problem, wenn ich versuche, die Daten in meine Tabellenansicht zu geben, sieht es folgendermaßen aus: ["Food": 1, "Candy": 1], wenn ich 1 Candy und 1 Essen hineinsetze. Dies ist meine gesamte Code, und wie ich schon sagte, ich bin ein Anfänger bei Codierung so weiß ich, es ist schrecklich :) } –

+0

Überschreibung func Tableview (Tableview: UITableView, numberOfRowsInSection Abschnitt: Int) -> Int { return 1 } override func tableView (Tabellenansicht: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let claster = tableView.dequeueReusableCellWithIdentifier ("calter") catterer? .textLabel? .text = Zeichenkette (counts) return claster! } } –

+0

Das Anzeigen der Daten in einer Tabellenansicht geht über den Umfang Ihrer Frage hinaus. Bitte schauen Sie sich in stackoverflow nach Beispielen um, wie dies gemacht wird. –