【问题标题】:How to get a random item from a List [duplicate]如何从列表中获取随机项目[重复]
【发布时间】:2018-07-25 17:30:38
【问题描述】:

美好的一天 我有这个数组和列表,我想从列表中获取一个随机值

random Ram = new Random();
String[] Test= {"C2", "C3", "C4"};

List<String> LTest = new List<String>(Test);

String var = Ram.Next(LTest);

错误 - 无法从 system.collection.generic.list 转换为 'Int'

我还想继续从列表中删除对象并将其添加到新对象中

Test.remove(Var);

newlist.add(Var);

谢谢。

【问题讨论】:

    标签: c# list


    【解决方案1】:

    如果您想从列表中随机选择一个项目,您可以通过多种方式进行。

    您可以使用 random 来计算整数,并将其用作索引:

    var index = random.Next(list.Count);
    var randomItem = list[index];
    

    或者你可以随机排序列表并取第一个:

    var item = list.OrderBy( s => random.NextDouble() ).First();
    

    第一种方法很常见;如果您希望从列表中选择多个随机项目并且希望避免重复,则第二种方法很方便。只需拿第一、二、三等物品即可。

    【讨论】:

    • 我认为第二种方法在非索引集合(如IEnumerable)的情况下更好,因为这意味着您不需要访问list 两次,从而更加干燥。但是对于索引集合(如IList),应该使用第一种方法,否则会很慢。
    【解决方案2】:

    Random.Next 接受 int 的参数。另外 don't 使用 var因为它是 c# 中的 reserved keyword,你需要

    String nextVal = Ram.Next(LTest.Count);
    

    【讨论】:

    • 教我什么 Contextual Keywords 在 C# 中的道具;我没有意识到var 不是保留字!
    • @Poosh 感谢提醒
    • 我不是在讽刺。我认为您实际上可以在该上下文中使用 var 作为变量名(基于链接所说的内容;我还没有尝试过)。但这可能取决于 C# 的版本...
    • 可以,但最好不要
    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多