1

このコードをどのように変換しますか

poker_deck = [r+s for r in '23456789TJQKA' for s in 'SHDC']

C#に?

私はこれで出てきました:

char[] figures = "23456789TJQKA".ToCharArray();
char[] suites = "SHDC".ToCharArray();
List<string> deck = new List<string>();

foreach (var figure in figures)
{
    foreach (var suite in suites)
    {
        deck.Add(string.Format("{0}{1}", figure, suite));
    }
}

どう思いますか?シンプルで読みやすい1行で同じことをしたい

4

2 に答える 2

3

流暢な LINQ は非常に読みやすいソリューションであり、元の Python コードに最も似ているソリューションになると思います。

var cards = from r in "23456789TJQKA"
            from s in "SHDC"
            select "" + r + s;

もちろん、1 行で書くこともできます。

var cards = from r in "23456789TJQKA" from s in "SHDC" select "" + r + s;

私もPythonをコーディングしているので、これは私の目を喜ばせ、あなたの理解のほとんど文学的な翻訳であることを見て:)

于 2012-04-21T10:15:40.633 に答える
2

はい、その方法です。必要に応じて、LINQ を使用してワンライナーにすることができます。

var deck = "23456789TJQKA".SelectMany(
               figure => "SHDC".Select(
                   suite => string.Format("{0}{1}", figure, suite))).ToList();

まったく同じことを行いますが、ここではデッキをリストにする必要はありません。必要に応じて ToList を ToArray に変更するか、文字列の IEnumerable のままにしておくことができます。

拡張メソッドとしてはこちら!

public static IEnumerable<TOut> Pair<T1, T2, TOut>(this IEnumerable<T1> items1, IEnumerable<T2> items2, Func<T1, T2, TOut> pairer)
{
    return items1.SelectMany(item1 => items2.Select(item2 => pairer(item1, item2)));
}

使用法:

var deck = "23456789TJQKA".Pair("SHDC", (figure, suite) => string.Format("{0}{1}", figure, suite));
于 2012-04-21T09:44:25.200 に答える