tableView

时间:2016-03-19 17:38:28

标签: ios arrays uitableview swift2 xcode7

我想首先说我是iOS(Swift 2.0)编码的初学者。所以我有一个数组,我想用最常见的元素排序,最不常见。然后我想将其插入到UITableView中,其中最常见的项目应显示在顶部,最不常见的项目显示在底部。因此,如果我在阵列中有一个名为“食物”的项目,并且它出现3次,它应该出现在名为“Candy”的项目的顶部,出现2次。谢谢!

编辑: 我很抱歉提出这么糟糕的问题,正如我所说,我是编程的初学者,所以我也不是最能解释我的情况的人。但是这次我会尝试更好地描述我的情况。首先,我想首先使用最常见的元素对数组进行排序,然后将第二个最常见的元素排序,依此类推。 John提供的答案帮助我做到了,之后我设法把它放到一个像这样的表中:

 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按我的意愿对元素进行排序。但是,我希望每个不同的对象只有一行。因此,如果数组包含的“Mat”比“Godis”更多,我仍然希望“Mat”高于“Godis”,但我希望它们各占一行。截至目前,tableView显示了我的数组中的每个项目,而我希望它删除重复项,但仍然优先考虑最常见的项目,而不是常见的项目。我知道我想删除这些项目但仍然使用John提供的功能可能听起来很奇怪,但如果有办法这样做我会很高兴。

现在总结一下我真正想要的东西,所以我尽可能清楚地说明这一点;在我链接的图片中,我的对象按它们的常见程度排序,我想知道是否有一种方法只显示一个相同的对象,但仍然以这种方式对数组进行排序。因此,如果有更多“Mat”而不是“Godis”,则应显示为:

第一排:Mat第二排:Godis

tableView

中的

我希望我足够清楚,只是作为一个提醒,我只是一个试图学习编码的初学者:)

1 个答案:

答案 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

}