1

使用Bogus我们可以轻松生成虚假和随机数据:https ://github.com/bchavez/Bogus 现在我需要生成一些人的。他们有age, weight, height, 所以这是我的代码:

internal class Person
{
    public int Age { get; set; }
    public int Height { get; set; }
    public int Weight { get; set; }

    public static Faker<Person> FakeData { get; } =
        new Faker<Person>()
            .RuleFor(p => p.Age, f => f.Random.Number(8, 90))
            .RuleFor(p => p.Height, f => f.Random.Number(70, 200))
            .RuleFor(p => p.Weight, f => f.Random.Number(15, 200));
}

它将很好地生成虚假和随机数据。但有一个问题。我需要使它有条件。例如,它将生成一个年龄9和身高为180!!! 或者一个人的身高70和体重190。我需要避免这样的世代。

有什么修复方法吗?

4

1 回答 1

1

要使身高的限制取决于年龄,而体重的限制取决于身高(因此,另一个函数),您需要参考当前的 Person 实例 - 请参见(f, x) => { return ...}下面的部分。

在阅读了用 Bogus 生成测试数据之后,我想到了这个:

using Bogus;

namespace SO70976495
{
    public class Person
    {
        public int Age { get; set; }
        public int Height { get; set; }
        public int Weight { get; set; }

        //TODO: Put the rand declaration somewhere more sensible.
        private static Random rand = new Random();

        public static Faker<Person> FakeData
        {
            get
            {
                return new Faker<Person>()
                      .RuleFor(p => p.Age, f => f.Random.Number(8, 90))
                      .RuleFor(p => p.Height, (f, x) =>
                      {
                          return RandHeightForAge(x.Age);
                      })
                      .RuleFor(p => p.Weight, (f, x) =>
                      {
                          return RandWeightForHeight(x.Height);
                      });
            }
        }

        private static int RandHeightForAge(int age)
        {
            //TODO: Make a realistic distribution
            return rand.Next(70, (int)(70 + age / 90.0 * 130));
        }

        private static int RandWeightForHeight(int height)
        {
            //TODO: Make a realistic distribution
            return 10 * rand.Next((int)Math.Sqrt(height - 15), (int)Math.Sqrt(height + 20));
        }

        public override string ToString()
        {
            return $"Person: {Age} yrs, {Height} cm, {Weight} kg";
        }

    }
}

上面代码中的任何愚蠢都是我的错。

于 2022-02-04T11:45:01.803 回答