在 LINQ 中对列表进行排序

本文关键字:排序 列表 LINQ | 更新日期: 2023-09-27 18:34:44

我必须创建一个包含对象的列表。并且对象需要按随机顺序排列。在这里,我给他们随机数:

Random tal = new Random();
list1[i].nummer = tal.Next(list1.Count);
listGold.Add(list1[i]);

现在我只需要按编号对它们进行排序。我认为 linq 可以为我做这件事。但它不能:S

我正在尝试这个:

RepeaterSponsorGold.DataSource = listGold.OrderBy(n => n.nummer);
RepeaterSponsorGold.DataBind();

按数字对我的列表进行排序,并将列表放入我的 repater。但是 lsit 似乎没有被排序...或者似乎没有得到随机数。我不知道是哪个。谁能看到我做错了什么??

在 LINQ 中对列表进行排序

尝试

RepeaterSponsorGold.DataSource = listGold.OrderBy(n => n.nummer).ToList();

如果您需要按随机顺序排序,您可以尝试:

var listGold = list1.OrderBy(n => Guid.NewGuid());

无需使用Random.

你不应该使用 Random(( 来洗牌列表,因为它可以产生确定性分布。

相反,请使用 suffle:

随机化列表

public static void Shuffle<T>(this IList<T> list)  
{  
    Random rng = new Random();  
    int n = list.Count;  
    while (n > 1) {  
        n--;  
        int k = rng.Next(n + 1);  
        T value = list[k];  
        list[k] = list[n];  
        list[n] = value;  
    }  
}
....
listGold.Shuffle();

这个怎么样:

List<string> list = new List<string>()
                        {
                            "Blue",
                            "Brown",
                            "Beige",
                            "Red",
                            "Black"
                        };
Random random = new Random();
var orderedList = list.Select(c => new {Item = c, Order = random.Next()})
    .OrderBy(i=>i.Item)
    .Select(x=>x.Item).ToList();
orderedList.ForEach(x=>Console.WriteLine(x));

你有几个问题。

最重要的是,你应该只有一个 Random 实例,并重复使用它,而不是每次都调用一个新的实例。

其次,通过使用列表计数作为种子,您将获得一个大致顺序的列表。

list1[i].nummer = tal.Next(list1.Count);

因为您正在使用您的列表。算作你的种子,你会得到一个列表,大致按照它们的添加顺序排列。

相反,请尝试:

Enumerable.Range(0,100)
    .ToDictionary(k=> Guid.NewGuid())
    .OrderBy(o => o.Key).Select(s => s.Value).ToList()

使用 Guid 将为您提供比随机更自然的随机化。