Другой возможный подход состоит в том, чтобы генерировать случайные индексы для данной строки и затем заменять символы в этих индексах:
var str = "Hello, playground"
let indexes: [Int] = Array(0..<str.count)
let randomIndexes = Array(indexes.shuffled()[0..<(str.count / 4)])
for index in randomIndexes {
let start = str.index(str.startIndex, offsetBy: index)
let end = str.index(str.startIndex, offsetBy: index+1)
str.replaceSubrange(start..<end, with: "_")
}
print(str)
Если вы поместите это в расширение для String, это будет выглядеть так: [113 ]
extension String {
func randomUnderscores(factor: Double) -> String {
let indexes: [Int] = Array(0..<count)
let endIndexes = Int(Double(count) * factor)
let randomIndexes = Array(indexes.shuffled()[0..<endIndexes])
var randomized = self
for index in randomIndexes {
let start = randomized.index(startIndex, offsetBy: index)
let end = randomized.index(startIndex, offsetBy: index+1)
randomized.replaceSubrange(start..<end, with: "_")
}
return randomized
}
}
print(str.randomUnderscores(factor: 0.25))
Я нашел лучший способ сделать, это должно использовать windbg и SOS (сын забастовки) расширение. Это имеет довольно загадочную командную строку, но это очень мощно. Это имеет возможность вывести "кучу" и разделить его на GC "куча" поколений. После того как Вы заканчиваете начальную кривую обучения, очень легко отследить, какие объекты живы в какой часть "кучи". Вот несколько веб-сайтов с примерами использования SOS
ОТРЕДАКТИРУЙТЕ OP, которую спрашивают о местоположении sos.dll. Это включено с установкой.Net Framework. Это расположено в
%WINDIR %\Microsoft. Net\Framework\V2.0.50727\sos.dll
Но после того как у Вас есть windbg, загруженный, Вам не нужен полный путь. Просто нас .loadby метод.
SOS .loadby mscorwks.dll
Это будет искать версию SOS в том же каталоге как текущая версия mscorwks (CLR)
Я использую профилировщика Памяти SciTech. Это немного сложно для использования от летучей мыши, но существуют некоторые хорошие учебные видео. Это позволит Вам посмотреть, какие объекты не расположены правильно, в котором поколении они были собраны. Не мог отладить утечки памяти без него...