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.pngまたはc1.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()));

への呼び出しToListは厳密には必要ありませんが、この例ではコードが高速になります。それがないと、Count()完全に列挙ElementAtされ、ランダムに選択されたインデックスに列挙する必要があります。

于 2013-04-09T12:53:49.800 に答える