所以,假设我有一个字符串:“abc”,我想改变每个字符的位置,这样我就可以有“cab”和后来的“bca”。我希望索引0的字符移动到1,索引1的字符移动到2,索引2的字符移动到0。我在Swift中有什么可以做到这一点?还有,让我们假设我用数字代替字母。有没有更简单的方法来处理整数?
oalqel3c1#
雨燕2:
extension RangeReplaceableCollectionType where Index : BidirectionalIndexType { mutating func cycleAround() { insert(removeLast(&self), atIndex: startIndex) } } var ar = [1, 2, 3, 4] ar.cycleAround() // [4, 1, 2, 3] var letts = "abc".characters letts.cycleAround() String(letts) // "cab"
字符串雨燕一号:
func cycleAround<C : RangeReplaceableCollectionType where C.Index : BidirectionalIndexType>(inout col: C) { col.insert(removeLast(&col), atIndex: col.startIndex) } var word = "abc" cycleAround(&word) // "cab"
型
fykwrbwg2#
在Swift Algorithms package中有一个rotate命令
rotate
import Algorithms let string = "abcde" var stringArray = Array(string) for _ in 0..<stringArray.count { stringArray.rotate(toStartAt: 1) print(String(stringArray)) }
字符串测试结果:
bcdea cdeab deabc eabcd abcde
wnrlj8wa3#
我遇到了一个问题,我需要标准化来自不同来源的库存编号。一些来源会在单位代码的数字部分之前放置一个字母字符,而另一些来源会将字母字符附加到单位代码的数字部分的末尾。我需要的格式是字符必须出现在数字之前。我首先要把字符串分解成单个的字符串元素,因为单元代码使用破折号,但是一旦这样做了,它就非常简单了。我希望这是Swift原生的,没有任何额外的框架或包。
func swapEndLetter(string: String) -> String { var string = string guard let letter = string.last?.isLetter else { return string } if letter { return "\(string.remove(at: string.index(before: string.endIndex)))\(string)" } return string }
字符串
var unitCode = "unit-code-1102a" var split = unitCode.components(separatedBy: "-") // ["unit", "code", "1102a"] split[split.count-1] = swapEndLetter(string: String(split[split.count-1])) // unitCode = split.joined(separator: "-") // "unit-code-a1102"
3条答案
按热度按时间oalqel3c1#
雨燕2:
字符串
雨燕一号:
型
fykwrbwg2#
在Swift Algorithms package中有一个
rotate
命令字符串
测试结果:
型
wnrlj8wa3#
Swift 5.7.2
我遇到了一个问题,我需要标准化来自不同来源的库存编号。一些来源会在单位代码的数字部分之前放置一个字母字符,而另一些来源会将字母字符附加到单位代码的数字部分的末尾。我需要的格式是字符必须出现在数字之前。
我首先要把字符串分解成单个的字符串元素,因为单元代码使用破折号,但是一旦这样做了,它就非常简单了。
我希望这是Swift原生的,没有任何额外的框架或包。
方法:
字符串
用法:
型