如何使用布尔值从预选列表中选择一个随机值来启用或禁用可用值?

Posted

技术标签:

【中文标题】如何使用布尔值从预选列表中选择一个随机值来启用或禁用可用值?【英文标题】:How to select a random value from a preselected list using booleans to enabled or disabled available values? 【发布时间】:2021-04-24 19:23:00 【问题描述】:

我可以使用随机类预选只能在使用布尔值时使用的数字吗?

例如:假设我想要一个介于 0-9 之间的随机数,但我只想从数字 1、4、6 和 8 中选择,如果说布尔值命名:“"、""、""、""是真的。

    bool Zero = false;
    bool One = true;
    bool Two = false;
    bool Three = false;
    bool Four = true;
    bool Five = false;
    bool Six = true;
    bool Seven = false;
    bool Eight = true;
    bool Nine = false;

所以它会输出这样的东西: 18441861684168448418411864816

有没有办法使用下面的“Random Class”来解决这个问题,但只将值(1、10)换成上面的真正布尔值,或者我需要使用一些东西别的?如果有,你有什么推荐的?

Random rnd = new Random();
int RandomizedNumber = rnd.Next(1, 10);  // creates a number between 1 and 9

我在 C# 中使用 Visual Studios Windows 窗体。

【问题讨论】:

所以你想要随机 4 个数字中的 1 个。 rnd.Next(0, 4) 也是如此,并将结果映射到您的实际值(如果结果是 2,则返回 6 等) 这能回答你的问题吗? How to access random item in list? 这能回答你的问题吗? C# Select random element from List @GSerg,2 个答案,距离 C# 金徽章约 200 分... 【参考方案1】:

实现此目的的一种简单且经过优化的方法是将要从中选择的数字放入一个列表中(易于修改,或放入一个数组中以实现全速),然后从该列表中选择一个随机元素。可以根据布尔值填充此列表。

例如:

var list = new List<int>  1, 4, 6, 8 ;

Random rnd = new Random();

// Pick a random number from the list
int index = rnd.Next(list.Count);
int randomizedNumber = list[index];

【讨论】:

Next 有一个重载,可以让你避免 0 Next (int maxValue) => rnd.Next(list.Count) docs.microsoft.com/en-us/dotnet/api/… @DragandDrop 好点,我已经更新了问题! 好的,所以我正在尝试实施您的解决方案,但是根据我在表单上选择的内容很难将特定数字添加到列表中,现在有办法将项目添加到列表中.例如,如果按下一个按钮,它会将数字 7 附加到可供选择的数字列表中?还有没有办法清除列表或至少删除特定数字? @Jaydon 您可以分别使用list.Add(item)list.Remove(item) 从列表中添加或删除项目。请参阅:docs.microsoft.com/en-us/dotnet/api/…(您还可以在此处找到其他方法)。同样,要清除列表,请致电list.Clear()。至于如何最适合您的表单,这实际上取决于您的设置,但这应该让您领先一步。【参考方案2】:

如果出于某种原因您想保留该布尔值列表,您可以更进一步,然后再使用 Luca_Scorpion 的上述答案。

我会创建一个带有布尔值和枚举的类作为转换。可能有一个更简单的解决方案,但目前我想不出一个。

然后您可以使用 LINQ 创建一个整数列表,您可以在上一个答案中使用。

public class NoSelection

    public bool Zero  get; set; 
    public bool One  get; set; 
    public bool Two  get; set; 
    public bool Three  get; set; 
    public bool Four  get; set; 
    public bool Five  get; set; 
    public bool Six  get; set; 
    public bool Seven  get; set; 
    public bool Eight  get; set; 
    public bool Nine  get; set; 


public enum Numbers

    Zero,
    One,
    Two,
    Three,
    Four,
    Five,
    Six,
    Seven,
    Eight,
    Nine


public void GetRandomNumer()

    var NoToUse = new NoSelection
    
        Zero = false,
        One = true,
        Two = false,
        Three = false,
        Four = true,
        Five = false,
        Six = true,
        Seven = false,
        Eight = true,
        Nine = false
     ;

     var noList = NoToUse.GetType().GetProperties().Where(x => (bool) x.GetValue(NoToUse, null) == true)
            .Select(x => Convert.ToInt32((Numbers)System.Enum.Parse(typeof(Numbers), x.Name))).ToList();

    var rnd = new Random();
    var index = rnd.Next(noList.Count);
    int randomizedNumber = noList[index];

【讨论】:

以上是关于如何使用布尔值从预选列表中选择一个随机值来启用或禁用可用值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 中使用 Datalist Dropdown 预选值?

oracle如何根据另一张表中的一行的值来选择一列

如何使用 php 预选 html 下拉列表? [复制]

布尔值从false切换为true的日期列表

如何通过从另一个下拉列表中选择值来填充下拉列表?

如何在 Shiny DT 数据表中预选行