【问题标题】:Get Random Object From Array for Different ID Field C#从数组中获取不同 ID 字段的随机对象 C#
【发布时间】:2011-11-21 16:41:40
【问题描述】:

我有一个对象的 ArrayList (C#)。 每个对象都有 ID 和值。

我需要为每个 ID 获取 1 个随机对象。

对象类就是这样构建的

public class ObjectRandom
{
    int32 id { get; set; }
    string value { get; set;}
}

例如,这个 ArrayList 有 6000 个 ObjectRandom。

ID 可以是连续的,也可以不是。

因此,如果每个用户有 500 个对象,则意味着有 12 个用户。 (ID1、ID2、ID5、ID10、ID11、ID15 ID22 等)。

我将只从 ArrayList(即有 6000 个对象)中获取 1 ObjectRandom 对于每个 ID。

有可能吗?目前我正在尝试没有任何结果。

【问题讨论】:

    标签: c# object random arraylist


    【解决方案1】:
    void Main()
    {
        var list = new List<ObjectRandom>()
        { 
            new ObjectRandom(){ id = 1, value = "a"},
            new ObjectRandom(){ id = 2, value = "b"},
            new ObjectRandom(){ id = 3, value = "c"},
            new ObjectRandom(){ id = 1, value = "d"},
            new ObjectRandom(){ id = 2, value = "e"},
            new ObjectRandom(){ id = 3, value = "f"},
        };
        var rnd = new Random();
        var q = from a in list.GroupBy (l => l.id)
                let col = a.ToList()
                select col[rnd.Next(0, col.Count)];
    }
    
    public class ObjectRandom 
    {
        public int id { get; set; }
        public string value { get; set;}
    }
    

    如果您需要使用 ArrayList 而不是通用列表,请使用:

    from a in list.Cast<ObjectRandom>().GroupBy (l => l.id)
    

    【讨论】:

    • 效果很好。我会问你另一个想法。如果我有 inObjectRandom 另一个字段 Like Type,我会为每个 id 取 1 类型的值。所以我可以从同一个用户那里得到 2 个结果,这可能吗?还是我必须为每种类型创建更多列表,以便我可以将此算法与不同的列表一起使用?
    • 我不确定你的意思。但是您可以对 id 和 type 进行分组。 list.GroupBy (l =&gt; new { l.id, l.Type })
    • 是的,你是对的,我没有很好地解释情况。但是,这正是我所需要的。两者都分组,我也不知道语法:) 非常感谢。祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2012-06-09
    • 2017-03-08
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多