【问题标题】: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 分...

标签: c# arrays list random


【解决方案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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2023-01-11
    • 2021-08-19
    • 2015-05-30
    • 2020-01-26
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多