Created
April 25, 2016 06:52
-
-
Save alexkent/af8794e0a1032bddf7e8d67fd530054a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
let string = "e5cfb500" | |
for var index = string.startIndex; index < string.endIndex; index = index.advancedBy(2) { | |
let rangeOfCharacterPair = Range<String.Index>(index..<index.advancedBy(2)) | |
let characterPair = string.substringWithRange(rangeOfCharacterPair) | |
print(characterPair) | |
} | |
Or maybe even:
extension String {
func chunked(size: Int) -> [String] {
var start = self.startIndex
let end = self.endIndex
var chunks = [String]()
while start != end {
let to = start.advancedBy(size, limit: self.endIndex)
chunks.append(self.substringWithRange(start..<to))
start = to
}
return chunks
}
}
str.chunked(2)
Maybe
var s = "e5cfb500"
let stride1 = Array(0.stride(to: s.characters.count, by: 2))
let stride2 = Array(1.stride(to: s.characters.count, by: 2))
for i in 0..<s.characters.count / 2 {
let c1 = s[s.startIndex.advancedBy(stride1[i])]
let c2 = s[s.startIndex.advancedBy(stride2[i])]
print(String(c1) + String(c2))
}
What about this? Ranges and maps are GREAT :). Also, this uses Swift's String subscript instead of substringWithRange
dropping the need for Foundation
.
let string = "e5cfb500"
let pairsCount = string.characters.count / 2
let pairs = (0..<pairsCount).map { pairNumber -> String in
let pairStartPosition = string.startIndex.advancedBy(pairNumber * 2)
return string[pairStartPosition...pairStartPosition.advancedBy(1)]
}
for pair in pairs {
print(pair)
}
Wait a second, I didn't see @paoloboschini's comment using stride
. That's clever! How about this even?
let string = "e5cfb500"
let pairs = 0.stride(to: string.characters.count, by: 2).map { pairStartPosition -> String in
return string[string.startIndex.advancedBy(pairStartPosition)...string.startIndex.advancedBy(pairStartPosition + 1)]
}
for pair in pairs {
print(pair)
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Maybe something like this: