Это массив элементов:
let numbers = [7, 7, 6, 6, 4, 4, 4, 5, 5, 7]
и вывод будет в заданной форме
[2, 2, 3, 2, 1]
Я пробовал этот метод:
for item in numbers {
let trueCount = numbers.filter { $0 == item }.count
print("\(item) Total Count is \(trueCount)")
}
Но это не работает.
Я не думаю, что полностью ясно, как вычислялся вывод. Можете ли вы отредактировать вопрос, чтобы он был более ясным?
Это школьное задание? Проверьте сокращение: developer.apple.com/documentation/swift/array/2298686-reduce особенно developer.apple.com/documentation/swift/array/3126956-reduce
не могли бы вы помочь, пожалуйста
Сначала нужно понять задание, посмотреть на ожидаемый результат и попытаться понять, что делать. Затем попробуйте написать для него код.
если семь приходит два раза, то число добавляется к массиву, затем 6 приходит два раза, тогда число добавляется в массив, как 2. я должен считать элемент в последовательности
Тогда почему бы тебе не попробовать это сделать?
я пытался, но так и не получил ответа, потому что я новичок в Swift
То, что вы ищете, похоже на это:
let input = [7,7,6,6,4,4,4,5,5,7]
let reduced = input.reduce(into: [(value: Int, count: Int)]()) { acc, value in
if (acc.last?.value == value) {
acc[acc.count - 1].count += 1
} else {
acc.append((value: value, count: 1))
}
}
let counts = reduced.map { $0.count }
print(counts)
Выход:
[2, 2, 3, 2, 1]
@DynamoPRo помогло?
Было бы намного проще просто сохранить последнее значение в var вместо создания коллекции кортежей. var last: Int?
let reduced: [Int] = input.reduce(into: []) {
if last == $1 {
$0[$0.index(before: $0.endIndex)] += 1
} else {
last = $1
$0.append(1)
}
}
люблю тебя @ndelanou спасатель жизни Ответ
@LeoDabus Я думаю, ты прав. Ваше решение проще
Вы наверняка что-то пробовали. SO не является бесплатным сайтом для написания кода. Не проявив хотя бы некоторых (исследовательских) усилий, вы вряд ли получите здесь ответ.