c# - 如何返回 HashSet 项的值而不是索引?

标签 c# asp.net-core

我正在 C# 中创建一个 int 类型的 HashSetHashSet 填充有随机生成的数字。我想从其中随机选择这些数字之一并将其返回给用户。问题是,我只看到返回 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/

相关文章:

c# - 使用 WriteImageToSavedPhotosAlbum 时未保存 Gps exif 数据

c# - 将配置的选项实例注入(inject)作用域服务的最佳方法是什么?

c# - 使用 EntityFramework.Core 从自引用表加载完整层次结构

c# - 使用旧解决方案将 nuget 包添加到 .net 核心项目时如何修复 $(NETStandardImplicitPackageVersion) 错误?

c# - 如何反序列化对对象列表的 JSON 响应

asp.net-core - 使用自定义函数 .NET Core 2 覆盖 OnTokenValidated JwtBearerEvents

c# - 使用字符串作为 IEnumerable

c# - 如何在 Asp.Net 中获取用户的 AD 用户组?

c# - 您无权在群组中发帖

c# - 将 HTML 呈现为图像