2

假设我List<string> FontStyle包含以下内容

        "a0.png",
        "b0.png",
        "b1.png",
        "b2.png",
        "b3.png", 
        "c0.png",
        "c1.png",
        "d0.png",
        "d1.png",
        "d2.png" 

我想从列表中随机选择一个字符串,其第一个字符与某个字符匹配。例如,如果字符是c. 该方法将返回c0.pngc1.png随机返回。

如何使用 LINQ 执行此操作?

4

2 回答 2

5

这应该可以解决问题:

var random = new Random();
var list = new List<string> {
    "a0.png",
    "b0.png",
    "b1.png",
    "b2.png",
    "b3.png", 
    "c0.png",
    "c1.png",
    "d0.png",
    "d1.png",
    "d2.png" 
};
var startingChar = "d";

var filteredList = list.Where(s => s.StartsWith(startingChar)).ToList();
Console.WriteLine(filteredList.Count);

int index = random.Next(filteredList.Count);
Console.WriteLine(index);

var font = filteredList[index];
Console.WriteLine(font);

但整个解决方案的问题在于,生成的过滤列表越小,您获得真正随机值的可能性就越小。该Random课程在更大的约束条件下效果更好 - 所以请记住这一点。

于 2013-04-09T12:55:20.297 回答
4
Random random = ...;
var itemsStartingWithC = input
    .Where(x => x.StartsWith("c"))
    .ToList();
var randomItemStartingWithC =
    itemsStartingWithC.ElementAt(random.Next(0, itemsStartingWithC.Count()));

调用 toToList不是绝对必要的,但在这种情况下会导致更快的代码。没有它,Count()将完全枚举并且ElementAt需要枚举到随机选择的索引。

于 2013-04-09T12:53:49.800 回答