我正在 C# 中创建一个 int 类型的 HashSet
。 HashSet
填充有随机生成的数字。我想从其中随机选择这些数字之一并将其返回给用户。问题是,我只看到返回 HashSet 中项目索引的解决方案,而不是实际值。我想知道如何访问我的 HashSet
项的值。
这就是我目前所拥有的,首先我创建一个从 10 到 20 的列表,它构成我的列表控件的一部分,这样做的原因是为了设置一个列表可以容纳的项目数的限制。
List<int> list_length = Enumerable.Range(10, 20).ToList();
然后,我迭代 list_length
并将一个随机数添加到我的主列表中,称为 hash_values
private readonly HashSet<int> hash_values = new HashSet<int>();
foreach (var i in list_length)
{
hash_values.Add(rnd.Next(10, 20));
}
然后,我访问 hash_values
列表并从中返回一个随机值。
int get_random_number = rnd.Next(hash_values.Count());
return Json(get_random_pin);
您会注意到随机返回实际上是从列表总数中选择一个值。这是没有用的。我想做的是随机选择一个项目并改变它的值而不是索引。
假设我有一个包含 5 个值的列表,hash_values
表将像这样存储它:
[0] 100
[1] 200
[2] 300
[3] 400
[4] 500
从列表总数中返回随机数之类的内容只会选择索引,因此我会收到 [1]
而不是 100
。那么,如何返回值而不是索引呢?
最佳答案
我建议使用返回的索引来访问哈希集中的值:
int get_random_value = hash_values.ElementAt(rnd.Next(hash_values.Count()));
编辑:
the reason for this is to set a limit on how many items a list can hold.
您也可以简单地在 int
中修复此数字并使用普通的 for 循环
int maxNumberOfItems = 10;
for (int i = 0; i < maxNumberOfItems; i++)
{
hash_values.Add(rnd.Next(10, 20));
}
编辑2免责声明:
在 HashSet 上使用索引的方法实际上会适得其反,因为如果你想访问该值,HashSet 会在 O(1) 中完成,但使用索引会在 O(n) 中完成,就像这样this answer中描述
关于c# - 如何返回 HashSet 项的值而不是索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68020329/