我试图解决这个挑战:给定组大小的组反转一系列元素.
给定数组:[1,2,3,4,5,6]
期望的结果(组大小为3):[4,5,6,1,2,3]
如果最后一个组的元素少于组大小,则只需添加它们并完成,如下所示:
给定数组:[1,2,3,4,5,6,7]
期望的结果:[ 5,6,7,2,3,4,1 ]
我试过这个并且它正在工作,但对我来说它看起来有点奇怪.任何人都可以帮我找到更清洁或更直观的解决方案吗?
extension Array {
func reverse(groupSize: Int) -> [Element] {
var reversed = [Element]()
let groups = count / groupSize
for group in 0...groups {
let lowerBound = count - group * groupSize - groupSize
let upperBound = count - 1 - group * groupSize
if lowerBound >= 0 {
reversed += Array(self[lowerBound...upperBound])
} else {
reversed += Array(self[0...upperBound])
}
}
return reversed
}
}
Run Code Online (Sandbox Code Playgroud) 在进行货币格式化工作时,我在尝试格式化智利比索时发现了一个问题。
按照此代码:
let priceFormatter = NumberFormatter()
priceFormatter.locale = Locale(identifier: "es_CL")
priceFormatter.numberStyle = .currency
priceFormatter.currencyCode = "CLP"
priceFormatter.string(from: 9990) // A
priceFormatter.string(from: 99900) // B
Run Code Online (Sandbox Code Playgroud)
执行此操作,A得到9990 美元,B得到99.990 美元。
我想要实现的是A 9.990美元
看起来格式化程序没有在第一种情况下添加千位分组分隔符,我不确定为什么。我尝试添加设置groupingSize
为 3 但没有成功。
(只有 4 位数字才会出现这种情况)
我想知道如何从给定的字符串中删除前缀列表中包含的任何前缀(例如:[“the”,“a”,“an”](例如:“A big redplanet”->“big redplanet”) ”)。
我尝试过这个想法,但我不知道它是否正确或最有效。
extension String {
func removing(prefixes: [String]) -> String {
var resultString = self
prefixes.map {
if resultString.hasPrefix($0) {
resultString = resultString.dropFirst($0.count).description
}
}
return resultString
}
}
Run Code Online (Sandbox Code Playgroud)
想法来自这个答案:如何通过标题的第一个字母创建字典,但忽略“the”或“a/an”等文章