【问题标题】:Sort function does not sort my structure in Swift [duplicate]排序功能不会在 Swift 中对我的结构进行排序 [重复]
【发布时间】:2020-12-20 01:08:16
【问题描述】:

我有一个定义如下的结构:我希望该结构按升序排序。

struct Share
{
   let firstColumn: String
   let secondColumn: String
   let thirdcolumn: String
   let FourthColumn: String
   init(firstColumn: String, secondColumn: String, thirdcolumn: String, FourthColumn: 
    String = "")
    {
        self.firstColumn = firstColumn
        self.secondColumn = secondColumn
        self.thirdcolumn = thirdcolumn
       self.FourthColumn = FourthColumn
    }

}

所有列都是类型转换为字符串的数字。我要做的就是按 firstColumn 对结构进行排序。

我在下面调用这个函数:

shares.sort(by:{ $0.firstColumn < $1.firstColumn })

但它不会对结构属性进行排序。

【问题讨论】:

  • “份额”从何而来?
  • 我创建的结构共享称为共享
  • 它将firstColumn 排序为String
  • 如果您可以在结构中将类型更改为 Double,请这样做,否则请尝试 shares.sort(by:{ Double($0.firstColumn) ?? 0 &lt; Double($1.firstColumn) ?? 0 })
  • String 排序不起作用,因为1000.0 按字典顺序排在12.0 之前。

标签: ios swift sorting


【解决方案1】:

您还可以为字符串的compare 指定.numeric 选项:

let results = shares.sorted {
    $0.firstColumn.compare($1.firstColumn, options: .numeric) == .orderedAscending
}

【讨论】:

    【解决方案2】:

    您的排序未按预期工作,因为您将firstColumn 排序为String。当被视为 String 时,1000.0 位于 12.0 之前,因此您不会得到按数字顺序排序的 firstColumn

    如果您可以将firstColumn 存储为Double,那么就这样做。

    否则,您可以在排序时转换值:

    shares.sort(by:{ Double($0.firstColumn) ?? 0 < Double($1.firstColumn) ?? 0 })
    

    注意:由于并非所有Strings 都可以转换为Double,因此转换失败时转换返回Double?nilnil 合并运算符 ?? 用于将失败的案例替换为 0。如果您确定所有值都会转换,那么?? 只需解开转换后的值。

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 2015-06-13
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多