我需要计算频率和百分比的帮助,我需要按最频繁的顺序排列,不带引号和大括号等
I need help calculating the frequency and percentage, I need it in order of most frequent and without the quotation marks & curly brackets etc
我一直在使用一个网站来计算频率,但他们最多有 50,000 个字符,现在我需要自己做,这真的是我从一开始就应该做的。
let frequencyCount = Dictionary(grouping: numbers) { [=10=] }
.mapValues{ [=10=].count }
mostFrequentTextView.text = String(format:"%@", frequencyCount)
let numbers = [
"1, 2, 3, 4",
"5, 6, 7, 8",
"3, 4, 5, 6",
"1, 2, 7, 8",
"1, 2, 3, 4",
"3, 4, 5, 6",
"1, 2, 3, 4",
"1, 2, 3, 4",
"5, 6, 7, 8",
"3, 4, 5, 6",
"1, 2, 7, 8",
"1, 2, 3, 4",
"3, 4, 5, 6",
"1, 2, 3, 4" ]
//当前结果↓
{
"1, 2, 3, 4" = 6;
"1, 2, 7, 8" = 2;
"3, 4, 5, 6" = 4;
"5, 6, 7, 8" = 2;
}
//想要的结果↓
1, 2, 3, 4 X 6 43%
3, 4, 5, 6 X 4 29%
1, 2, 7, 8 X 2 14%
5, 6, 7, 8 X 2 14%
分组后,您可以使用 sorted
和 reduce
构建输出
let output = frequencyCount.sorted(by: {[=10=].value > .value}).reduce(into: "") {
let fraction = Int(round(100.0 * Double(.value) / Double(numbers.count)))
[=10=] += "\(.key) X \(.value) \(fraction)%\n"
}
输出
1, 2, 3, 4 X 6 43%
3, 4, 5, 6 X 4 29%
1, 2, 7, 8 X 2 14%
5, 6, 7, 8 X 2 14%
如果你喜欢String.format()
let fraction = round(100.0 * Double(.value) / Double(numbers.count))
[=12=] += String(format: "%@ X %d %.0f%%\n", .key, .value, fraction)
如果您想将所有内容放在一起,请完成代码
let total = Double(numbers.count)
let output = Dictionary(grouping: numbers) { [=13=] }
.mapValues{ [=13=].count }
.sorted(by: {[=13=].value > .value})
.reduce(into: "") {
[=13=] += "\(.key) X \(.value) \(Int(round(100.0 * Double(.value) / total)))%\n"
}
我一直在使用一个网站来计算频率,但他们最多有 50,000 个字符,现在我需要自己做,这真的是我从一开始就应该做的。
let frequencyCount = Dictionary(grouping: numbers) { [=10=] }
.mapValues{ [=10=].count }
mostFrequentTextView.text = String(format:"%@", frequencyCount)
let numbers = [
"1, 2, 3, 4",
"5, 6, 7, 8",
"3, 4, 5, 6",
"1, 2, 7, 8",
"1, 2, 3, 4",
"3, 4, 5, 6",
"1, 2, 3, 4",
"1, 2, 3, 4",
"5, 6, 7, 8",
"3, 4, 5, 6",
"1, 2, 7, 8",
"1, 2, 3, 4",
"3, 4, 5, 6",
"1, 2, 3, 4" ]
//当前结果↓
{
"1, 2, 3, 4" = 6;
"1, 2, 7, 8" = 2;
"3, 4, 5, 6" = 4;
"5, 6, 7, 8" = 2;
}
//想要的结果↓
1, 2, 3, 4 X 6 43%
3, 4, 5, 6 X 4 29%
1, 2, 7, 8 X 2 14%
5, 6, 7, 8 X 2 14%
分组后,您可以使用 sorted
和 reduce
构建输出
let output = frequencyCount.sorted(by: {[=10=].value > .value}).reduce(into: "") {
let fraction = Int(round(100.0 * Double(.value) / Double(numbers.count)))
[=10=] += "\(.key) X \(.value) \(fraction)%\n"
}
输出
1, 2, 3, 4 X 6 43%
3, 4, 5, 6 X 4 29%
1, 2, 7, 8 X 2 14%
5, 6, 7, 8 X 2 14%
如果你喜欢String.format()
let fraction = round(100.0 * Double(.value) / Double(numbers.count))
[=12=] += String(format: "%@ X %d %.0f%%\n", .key, .value, fraction)
如果您想将所有内容放在一起,请完成代码
let total = Double(numbers.count)
let output = Dictionary(grouping: numbers) { [=13=] }
.mapValues{ [=13=].count }
.sorted(by: {[=13=].value > .value})
.reduce(into: "") {
[=13=] += "\(.key) X \(.value) \(Int(round(100.0 * Double(.value) / total)))%\n"
}