通过swift重新排序Dictionary的数组

时间:2015-05-04 22:19:17

标签: ios arrays swift

我正在通过swift开发ios app!

我需要通过价格值显示字典顺序数组中的数据。 我该怎么重新排序这个数组

(
        {
        price = 269600;
        userid = "facebook:851661711521620";
    },
        {
        price = 294600;
        userid = "facebook:851661711521620";
    },
        {
        price = 1345600;
        userid = "facebook:851661711521620";
    },
        {
        price = 287600;
        userid = "facebook:851661711521620";
    },
        {
        price = 1344600;
        userid = "facebook:851661711521620";
    },
        {
        price = 1343600;
        userid = "facebook:851661711521620";
    },
        {
        price = 1333600;
        userid = "facebook:851661711521620";
    },
        {
        price = 1332600;
        userid = "facebook:851661711521620";
    },
        {
        price = 1322600;
        userid = "facebook:851661711521620";
    },
        {
        price = 322600;
        userid = "facebook:851661711521620";
    },
        {
        price = 302600;
        userid = "facebook:851661711521620";
    },
        {
        price = 300600;
        userid = "facebook:851661711521620";
    },
        {
        price = 291600;
        userid = "facebook:851661711521620";
    },
        {
        price = 282600;
        userid = "facebook:851661711521620";
    },
        {
        price = 299600;
        userid = "facebook:851661711521620";
    }
)

按价格从最高到最低订购? 我需要显示数据是这样的

enter image description here

任何想法我该怎么办谢谢!

谢谢!

编辑添加一些实际代码。

self.currentBidDict = snapshot.value["current_bid_id"] as! NSDictionary

for(var i = 0;i <= self.currentBidDict.count - 1;i++){
    self.currentBidDictReOrder.insertObject(self.currentBidDict.allValues[i], atIndex: 0)
    println(self.currentBidDictReOrder)
}

然后在我打印之后我在问题中得到了数组。

2 个答案:

答案 0 :(得分:3)

有一个函数sort,它接受​​任何序列,并返回一个已排序的数组。由于字典是(key,value)对的序列,因此您可以将字典传递给排序。

如果你传入的内容不是自然可排序的(即序列的元素是Comparable,哪些字典不是),你还需要提供一个关闭告诉sort如何订购要素。在您的情况下,您希望该闭包比较字典中特定键的值。

最后,您希望按值排序,但查找字典中的键会返回一个可选项(因为该键可能不在那里)。但是,这很好!因为可选项具有<运算符,只要可选包含的内容具有可比性。除此之外,看起来你有一个AnyAnyObject的字典(因为你有字符串和整数),所以你必须将它们转换成你可以比较的东西。 / p>

全部放在一起,并且:

sorted(dict) { ($0["price"] as? Int) > ($1["price"] as? Int) }

根据字典实际包含的内容,您可能需要稍微调整一下as?。此外,我强烈建议您创建一个更强类型的结构并用您的数据填充它,而不是像这样以字典形式保留它。

答案 1 :(得分:2)

您可以通过以下方式使用sort功能:

var dict =  [[
        "price" : 1111,
        "userid" : "facebook:851661711521620"
        ],
        [
        "price" : 12222,
        "userid" : "facebook:851661711521620"
        ],
        [
        "price" : 144444,
        "userid" : "facebook:851661711521620"
        ]]       

// sort by price 
dict.sort {
    x, y in
    let item1 = x["price"] as! Int
    let item2 = y["price"] as! Int
    return item1 > item2
}

输出应该是这样的:

[[price: 144444, userid: facebook:851661711521620], [price: 12222, userid: facebook:851661711521620], [price: 1111, userid: facebook:851661711521620]]

我希望这对你有所帮助。