我想知道是否有可能,比如说我有一个带有以下数据的结构数组:
struct Data {
Prop = 25
Weight = 12
}
现在假设我想从数组中找到一个随机元素,并遵循以下规则:
- 按
Prop
值过滤数组。 - 然后使用
Weight
作为偏差来随机选择一个元素。
创建时间列表然后从中随机选择一个元素很简单。
但是我们最终只希望从数组中获得1个元素,是否有一些巧妙的技巧可以避免堆分配?
我想知道是否有可能,比如说我有一个带有以下数据的结构数组:
struct Data {
Prop = 25
Weight = 12
}
现在假设我想从数组中找到一个随机元素,并遵循以下规则:
Prop
值过滤数组。Weight
作为偏差来随机选择一个元素。创建时间列表然后从中随机选择一个元素很简单。
但是我们最终只希望从数组中获得1个元素,是否有一些巧妙的技巧可以避免堆分配?
不确定如何从集合中选择偏倚的随机元素,但是如果您的问题只是不创建时间列表,则可以轻松地使用LINQ来完成此任务:
IEnumerable<Data> myData; // assuming your data is in here
var randomElement = myData.Where(d => d.Prop > 10) //or some other filter
.Single(d => {/*put your code to select the biased element here*/})