SwiftUI中如何对含字符串与Double的列表按Double值排序
解决SwiftUI中[String: Double]字典按Double值排序的问题
你的代码里,sorteByValue.sorted(by: >)默认会比较字典键值对的键(String类型)——因为Swift中字典的元素是(key: String, value: Double)元组,直接使用>运算符会按元组的第一个元素(即key)进行字符串排序,这就是为什么当前排序依据是字符串而非Double值。
要实现按Double值排序,只需要修改sorted的闭包,明确指定比较两个元素的value属性即可:
修改后的完整代码
import SwiftUI struct ContentView: View { @State private var sorteByValue: [String : Double] = ["key1": 3.5, "key2": 1.2, "key3": 5.0] var body: some View { List { // 明确指定按value排序 ForEach(sorteByValue.sorted { $0.value > $1.value }, id: \.key) { key, value in HStack{ Text("\(value, specifier: "%.2f")") Text(key) } } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
关键说明
sorted { $0.value > $1.value }:指定按字典值的降序排序,如果需要升序,把>换成<即可。- 建议把原代码中的
id: \.value改成id: \.key——因为字典的key是唯一的,而value可能存在重复,用key作为标识更安全,避免SwiftUI列表出现标识冲突的问题。
内容的提问来源于stack exchange,提问作者Mane Manero
相关产品推荐
相关产品推荐

