koe*_*oen 5 arrays sorting string swift4
所以这个问题是对这个问题的跟进:快速字符串排列允许相同的字符串
在那里,我询问了我可以使用一组已定义的字符串进行的所有可能的突变.我接下来要做的是过滤掉所有具有相同组合但结果不同的结果.
因此,如果输入为:["AB", "AC", "CA", "CB"],则输出应为["AB", "AC", "CB"],因为"AC"和"CA"具有相同的构建块.
所以我的想法是先按字母顺序排序每个字符串,然后创建一个Set.
我已经卡在第一部分:(
let array = ["AB", "AC", "DC", "CA", "CB"]
print(type(of: array))
print(array)
let sortedArray = array.map{ $0.sorted() }
print(type(of: sortedArray))
print(sortedArray)
Run Code Online (Sandbox Code Playgroud)
输出是:
Array<String>
["AB", "AC", "DC", "CA", "CB"]
Array<Array<Character>>
[["A", "B"], ["A", "C"], ["C", "D"], ["A", "C"], ["B", "C"]]
Run Code Online (Sandbox Code Playgroud)
虽然我期待sortedArray:
["AB", "AC", "CD", "AC", "BC"]
Run Code Online (Sandbox Code Playgroud)
然后我想把各个字符串加在一起:
print(array.map{ $0.joined() } )
Run Code Online (Sandbox Code Playgroud)
导致 ambiguous reference to member 'joined()'
但是如何解决这个我不明白.
我也看到了这一个:字符串中的swift排序字符,其中使用了以下代码:
var nonSortedString = "5121"
var sortedString = String(Array(nonSortedString.characters).sort())
Run Code Online (Sandbox Code Playgroud)
但我没有看到如何应用使用map和朋友(转换为Swift 4后)
任何帮助赞赏.
Rob*_*Rob 14
如果你想获取一个字符串,对其字符进行排序,并从中构建一个新字符串,在Swift 4中你可以:
let string = "foobar"
let sortedString = String(string.sorted())
Run Code Online (Sandbox Code Playgroud)
这导致:
"abfoor"
所以,回到你原来的问题,你可以带你的字符串,这是一组排列,并构建一个排序的组合数组,如下所示:
let permutations = ["AB", "AC", "DC", "CA", "CB"]
// build set of combinations where each string has, itself, been sorted alphabetically
let combinations = Set(permutations.map { String($0.sorted()) })
// convert set (which removed duplicates) back to an array and sort it
let result = Array(combinations).sorted()
Run Code Online (Sandbox Code Playgroud)
这导致:
["AB","AC","BC","CD"]