c# - 根据值从字典中选择随机条目

标签 c# dictionary random

我有一本关于餐馆的字典和一种类型的餐馆:Dictionary<Restaurant, string>餐厅是我的类(class),为简单起见,我使用字符串表示我的餐厅类型。

假设我的列表中有 25 个条目,其中可以有相同类型的 3、4 或 5 家餐厅组。现在我想缩小范围,为每种类型选择 1 个随机元素。

我找到了 this解释如何从字典中选择随机值的页面,但我将如何为每个类型分组选择一个随机条目?

如果我需要详细说明或者您是否需要其他信息,请告诉我!

编辑:我的代码示例:

Dictionary<Restaurant, string> restaurants = new Dictionary<Restaurant, string>();

randomRestaurants.Add(restaurants.GroupBy(x => x.string).//Randomly pick an entry per grouping and add it to list//

List<Restaurant> randomRestaurants = new List<Restaurant>();

例如:可能的类型可以是Italian , Fast foodSushi

我很抱歉提出了另一个令人困惑的问题。在发布内容之前,我会更加注意。

最佳答案

第一个想法(对于此列表的任何用途)是将您的数据源排序为更合理的格式,即键值结构,其中键类型是标识餐厅子集(字符串)的东西,值是其中的餐厅列表。

您可以使用类似于以下的代码来执行此操作:

var sensibleDict = sillyDict
    .GroupBy(kv => kv.Value)
    .ToDictionary(
        m => m.Key,
        m => m.Select(kv => kv.Key).ToList());

现在,我们可以简单地将结果随机化,并在随机化后取第一个将其转换为 Key => Single Value 项。

var randomDict = sillyDict
    .GroupBy(kv => kv.Value)
    .ToDictionary(
        m => m.Key,
        m => m.Select(kv => kv.Key)
            .OrderBy(k => Guid.NewGuid())
            .Take(1)
            .First());

这会给你一个 Dictionary<string, Restaurant>其中第一个字符串是食物的类型(即意大利,寿司),第二个是随机的 Restaurant .

注意:正如我在评论中所说,如果您的数据集变大,这不是排序列表的最有效方式。有关改组列表的更好方法,请查看 at this answer - Randomise a List .

关于c# - 根据值从字典中选择随机条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40633791/

相关文章:

python - 在 Python 中将句子更改为字典

c# - 从没有重复元素的数组字符串中获取随机 8 个元素值

iphone - 如何随机放置 UIButton 和值

c# - 双向绑定(bind)不适用于日期选择器 MVVM

c# - 拆分字符串时出现混淆错误

c# 数据源正在返回 System.Data.DataRowView

python random.randint 以 5 为增量生成 0-100

c# - 如何在 Unity 中根据混音器的音量设置 slider 的音量?

以元组为键的 MATLAB containers.Map

flash - AS3 : Check if a Dictionary is empty