2016-03-19 2 views
-4

Прежде всего я хотел бы сказать, что я новичок в кодировании в iOS (Swift 2.0). Поэтому у меня есть массив, который я хочу отсортировать с наиболее распространенным элементом сначала, а наименее общим - последним. Затем я хочу вставить это в UITableView, где наиболее распространенный элемент должен отображаться сверху и наименее общий в нижней части. Поэтому, если у меня есть элемент под названием «Продовольствие» в массиве, и он появляется 3 раза, он должен быть на вершине элемента под названием «Candy», который появляется 2 раза. Благодаря!Наиболее распространенный элемент массива в таблицеView

EDIT: Прошу прощения за то, что вы предлагаете такой плохой вопрос, и, как я уже сказал, я начинающий программировать, поэтому я не лучший, объясняющий свою ситуацию. Но на этот раз я попытаюсь описать свою ситуацию лучше. Во-первых, я хотел сначала отсортировать свой массив с наиболее распространенным элементом, а вторым наиболее распространенным элементом после этого и так далее. Ответ, который был предоставлен Джон помог мне сделать это, и после этого я сумел поставить его в Tableview, как это:

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! 
} 

переменная prioLista, которая включена в код представляет собой массив из другого файла. Нажав кнопку, вы можете добавить в нее строки.

My tableView after sorting elements after most common

Так вот где я сейчас, как вид изображения. TableView сортирует элементы так, как я хотел. Тем не менее, я хотел бы иметь только одну строку для каждого объекта. Поэтому, если массив содержит больше «Мат», чем «Godis», я все равно хочу, чтобы «Мат» был выше «Godis», но я хочу, чтобы они занимали по одной строке. На данный момент tableView показывает каждый отдельный элемент, который у меня есть в моем массиве, и вместо этого я хотел бы, чтобы он удалял дубликаты, но все же расставлял приоритеты на наиболее распространенные из них, чтобы быть среди менее распространенных. Я знаю, что может показаться странным, что я хочу удалить элементы, но все равно использую функцию, предоставленную Джоном, но если есть способ сделать это, я буду так счастлив.

Итак, теперь, чтобы обобщить то, что я на самом деле хочу, я делаю это как можно более ясным; На картинке, которую я связывал, мои объекты отсортированы по тому, насколько они распространены, и я задаюсь вопросом, есть ли способ отображать только один из тех же объектов, но все же сортировать массив таким образом. Так что, если есть более «Mat», чем «Godis» он должен быть представлен в виде:

первая строка: Mat второй ряд: Godis

в Tableview

Я надеюсь, что я был достаточно ясно и просто как напоминание, я просто начинающий, который пытается научиться кодировать :)

+0

Пожалуйста, примите к сведению, что вы не можете рассчитывать на полный ответ здесь. пожалуйста, опишите, сколько вы сделали и где вы застряли. –

ответ

0

Существует, вероятно, несколько подходов для этого, но вот один пример. Начните с получения количества раз, когда в массиве будет встречаться строка, а затем сохраните ее в словаре. Затем используйте этот словарь для сортировки массива:

let arr = ["Food", "Candy", "Food", "Candy", "Food"] 

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

for (index, value) in arr.enumerate() { 

    if let count = counts[value]{ 

     counts[value] = count + 1 

    } 
    else{ 
     counts[value] = 1 
    } 

} 

let sorted = arr.sort { (first, second) -> Bool in 

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

    return firstCount > secondCount 

} 
+0

Спасибо вам большое! У меня только одна проблема сейчас, когда я пытаюсь передать данные в свой рабочий стол, она выглядит следующим образом: [«Еда»: 1, «Candy»: 1], когда я добавляю в нее 1 конфету и 1 пищу. Это весь мой код, и, как я уже сказал, я новичок в кодировании, так что я знаю, что это ужасно :) } –

+0

переопределение функ Tableview (Tableview: UITableView, numberOfRowsInSection раздел: Int) -> Int { возвращение 1 } переопределить func tableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cellster = tableView.dequeueReusableCellWithIdentifier ("cellster") cellster? .textLabel? .text = String 10 возвращение клеточного! } } –

+0

Отображение данных в представлении таблицы выходит за рамки вашего вопроса. Посмотрите пример stackoverflow для примеров того, как это сделать. –

Смежные вопросы