【发布时间】:2011-08-22 09:30:22
【问题描述】:
如果我有这样的清单
- 英国白人,85.67
- 白色(其他),5.27
- 爱尔兰白人,1.2
- 混血,1.2
- 印度,1.8
- 巴基斯坦,1.3
- 孟加拉国,0.5
- 其他亚洲人(非中国人),0.4
- 加勒比黑,1
- 非洲黑人,0.8
- 黑色(其他),0.2
- 中文,0.4
- 其他,0.4
例如,我想从此列表中选择 10,000 个值,但我想让所选值与与其关联的权重相匹配。所以大约 85% 的选定值应该是“英国白人”。
我一直在尝试使用 LINQ,但没有成功。
var items = from dataItem in listOfItems
where (dataItem.uses / listOfItems.Count) <= dataItem.weighting
select dataItem;
其中 uses 是该值被选中的次数,而 listOfItems.Count 是到目前为止总共被选中的次数。
谢谢
【问题讨论】:
-
dataItem.uses是整数吗?如果是这种情况,那么:where (dataItem.uses / listOfItems.Count) <= dataItem.weighting将进行整数运算,因此您不会得到您期望的结果。您需要转换为浮点类型:where ((double)(dataItem.uses) / (double)(listOfItems.Count)) <= dataItem.weighting。虽然它可能无法解决您的根本问题。