Dart中String表情列表计算平均表情时索引0的处理问题
表情平均计算问题解决方案
关于索引为0的处理说明
列表从0开始的索引是编程语言的通用设计,不存在逻辑bug。
序列第一个表情(☹️)的索引为0,代入公式时贡献为0是符合计算逻辑的:你存储的表情本身是按照情绪从负面到正面连续排列的,处于序列起点的表情权重最低,不需要额外对索引做整体偏移(无需将索引改为从1开始计数)。
你之前计算出现偏差的核心原因,是代入公式的索引值和列表实际位置不匹配,和索引0的设计无关。你定义的列表实际索引对应关系为:
索引0: ☹️ 索引1: 😟 索引2: 😕 索引3: 😲 索引4: 😃 索引5: 😍
完整计算流程
- 核对每个被选表情的实际索引,统计对应选中次数:
- ☹️(索引0):选中3次
- 😲(索引3):选中1次
- 😍(索引5):选中2次
- 总参与计算人数:6人
- 代入公式计算平均索引:
avgIndex = (0*3 + 3*1 + 5*2) / 6 = 13 / 6 ≈ 2.17 - 对得到的浮点数索引做常规四舍五入取整:
2.17.round() = 2 - 直接使用取整后的索引从原表情列表中取值,得到最终的平均表情:列表索引2对应的😕即为结果。
补充说明
如果刻意将所有索引整体偏移1(让第一个表情从1开始计数),最终算出的平均值也会整体加1,取列表值时再减1就能得到完全一致的结果,属于无意义的重复操作,无需对索引0做特殊适配。
内容的提问来源于stack exchange,提问作者PHP Pharaoh
相关产品推荐
相关产品推荐

