Đây là một phiên bản làm việc Swift 3, cho NSRange, Range, String và NSString! Thưởng thức :)
/// All ranges using NSString and NSRange
/// Is usually used together with NSAttributedString
extension NSString {
public func ranges(of searchString: String, options: CompareOptions = .literal, searchRange: NSRange? = nil) -> [NSRange] {
let searchRange = searchRange ?? NSRange(location: 0, length: self.length)
let subRange = range(of: searchString, options: options, range: searchRange)
if subRange.location != NSNotFound {
let nextRangeStart = subRange.location + subRange.length
let nextRange = NSRange(location: nextRangeStart, length: searchRange.location + searchRange.length - nextRangeStart)
return [subRange] + ranges(of: searchString, options: options, searchRange: nextRange)
} else {
return []
}
}
}
/// All ranges using String and Range<Index>
/// Is usually used together with NSAttributedString
extension String {
public func ranges(of searchString: String, options: CompareOptions = [], searchRange: Range<Index>? = nil) -> [Range<Index>] {
if let range = range(of: searchString, options: options, range: searchRange, locale: nil) {
let nextRange = range.upperBound..<(searchRange?.upperBound ?? endIndex)
return [range] + ranges(of: searchString, searchRange: nextRange)
} else {
return []
}
}
}
Nếu tôi hiểu Tài liệu chính xác, điều này sẽ cung cấp phạm vi của bất kỳ ký tự nào trong tập hợp. Nhưng tôi cần đếm * mỗi * ký tự. – Elliot
ý tưởng của tôi là để giữ từ điển của char -> đếm cặp và sau đó nhận được char tại chỉ số nhất định và tăng nó đếm trong từ điển ... hoặc bạn chỉ có thể lặp qua chuỗi và kiểm tra xem mỗi nhân vật trong tập của bạn, nếu nó sau đó tăng số đếm là – stefanB