【问题标题】:how to get random amount of details from a list or var in c#如何从 C# 中的列表或 var 中获取随机数量的详细信息
【发布时间】:2016-07-15 16:31:06
【问题描述】:

我正在从本地项目中的 json 文件中读取结果。它返回超过 4000 个结果。我只想从该结果中获取随机数量的结果(500-1000 之间)。

 var finalResultz = finalResults("All","All","All");//step one

在这里它返回超过 4000 个结果。然后我放入这样的列表中。

List<Results> searchOne = new List<Results>();//step two
            foreach(var itms in finalResultz)
            {
                searchOne.Add(new Results 
                {
                    resultDestination = returnRegionName(itms.areaDestination),
                    mainImageurl = itms.testingImageUrl
                });
            }


            ViewBag.requested = searchOne;

但我只想得到我所说的结果。我想在第一步或第二步调整计数。我该怎么做。希望你的帮助。

【问题讨论】:

  • 500-1000 之间的随机结果数到底是什么意思?您需要前 N 个结果,一个分布在第 2、3、4 步...?
  • 是的,这正是我想要的,500-1000 之间的随机结果数
  • 一定要标记答案。

标签: c# list random var


【解决方案1】:

如果你想要一个随机的结果计数,你可以.Take()一个随机的记录数。首先,您需要一个Random

var random = new Random();

如果你想要在 500-1000 之间,只需获取该范围内的随机值:

var count = random.Next(500, 1001);

然后您可以从集合中获取这些记录:

var newList = oldList.Take(count).ToList();

(当然,您可能希望首先确保它包含那么多记录。)

请注意,这将从集合中获取 first N 条记录。因此,为了从集合中的 anywhere 获取随机记录,您需要在获取记录之前对集合进行洗牌(随机化)。有很多方法可以做到这一点。一种可能不是绝对最快但为简单起见通常“足够快”的方法是仅按 GUID 排序。所以是这样的:

var newList = oldList.OrderBy(x => Guid.NewGuid()).Take(count).ToList();

或者也许再次使用随机发生器:

var newList = oldList.OrderBy(x => random.Next()).Take(count).ToList();

【讨论】:

  • 感谢您的回答
【解决方案2】:

你可以使用Random类和Take()方法来提取N个元素。

// create new instance of random class
Random rnd = new Random(); 

// get number of elements that will be retrieved from 500 to 1000
var elementsCount = rnd.Next(500, 1000);

// order source collection by random numbers and then take N elements: 
var searchOne = finalResultz.OrderBy(x => rnd.Next()).Take(elementsCount);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2019-12-18
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多