【发布时间】:2019-06-14 03:19:21
【问题描述】:
我已经在 Swift for iOS 中成功实现了一个排序算法。 (见下面的代码)。
现在,我想在 Dart for Flutter 中实现相同的算法。
而且我必须意识到我的试用版(见下文)与 Swift 代码不同。为什么????
谁能解释一下 Swift 的 sorted 函数和 Dart 的 sort 函数之间的区别?为什么我下面的 code-sn-ps 在 Swift 和 Dart 中没有做同样的事情???
这是 Swift 代码:
return stationItems.sorted {
let nameA = $0.name!
.replacingOccurrences(of: ",", with: "", options: .literal, range: nil)
.replacingOccurrences(of: "ä", with: "a", options: .literal, range: nil)
.replacingOccurrences(of: "ö", with: "o", options: .literal, range: nil)
.replacingOccurrences(of: "ü", with: "u", options: .literal, range: nil)
.lowercased()
let nameB = $1.name!
.replacingOccurrences(of: ",", with: "", options: .literal, range: nil)
.replacingOccurrences(of: "ä", with: "a", options: .literal, range: nil)
.replacingOccurrences(of: "ö", with: "o", options: .literal, range: nil)
.replacingOccurrences(of: "ü", with: "u", options: .literal, range: nil)
.lowercased()
let searchTermy = searchTerm
.replacingOccurrences(of: ",", with: "", options: .literal, range: nil)
.replacingOccurrences(of: "ä", with: "a", options: .literal, range: nil)
.replacingOccurrences(of: "ö", with: "o", options: .literal, range: nil)
.replacingOccurrences(of: "ü", with: "u", options: .literal, range: nil)
.lowercased()
if nameA == searchTermy && nameB != searchTermy {
return true
} else if nameA.hasPrefix(searchTermy) && !nameB.hasPrefix(searchTermy) {
return true
} else if nameA.contains(searchTermy) && !nameB.contains(searchTermy) {
return true
} else {
let n = searchTermy.count
for i in 0..<searchTermy.count {
if nameA.hasPrefix(String(searchTermy[..<(n-i)])) && !nameB.hasPrefix(String(searchTermy[..<(n-i)])) {
return true
} else {
return false
}
}
return false
}
}
这是 Dart 代码:
return stationList.sort((a, b) {
var nameA = a.stopName
.replaceAll(RegExp(','), '')
.replaceAll(RegExp('ä'), 'a')
.replaceAll(RegExp('ö'), 'o')
.replaceAll(RegExp('ü'), 'u')
.toLowerCase();
var nameB = b.stopName
.replaceAll(RegExp(','), '')
.replaceAll(RegExp('ä'), 'a')
.replaceAll(RegExp('ö'), 'o')
.replaceAll(RegExp('ü'), 'u')
.toLowerCase();
var searchTermy = stationName
.replaceAll(RegExp(','), '')
.replaceAll(RegExp('ä'), 'a')
.replaceAll(RegExp('ö'), 'o')
.replaceAll(RegExp('ü'), 'u')
.toLowerCase();
if ((nameA == searchTermy) && (nameB != searchTermy)) {
return 1;
} else if (nameA.startsWith(searchTermy) && !nameB.startsWith(searchTermy)) {
return 1;
} else if (nameA.contains(searchTermy) && !nameB.contains(searchTermy)) {
return 1;
} else {
var n = searchTermy.length;
for (int i = 0; i < searchTermy.length; i++) {
if (nameA.startsWith(searchTermy.substring(0, (n - i))) && !nameB.startsWith(searchTermy.substring(0, (n - i)))) {
return 1;
} else {
return 0;
}
}
return 0;
}
});
【问题讨论】:
-
一个带有输入和预期/实际输出的具体示例会有所帮助。
标签: swift list sorting dart flutter