順列

順列生成メソッド
順列生成メソッド:僕も書いてみた:Gushwell's Dev Notes
やってみました。

static IEnumerable<string> GetPermutation( string str )
{
    return Enumerable.Range( 0, str.Length )
        .Select( _ => str.ToCharArray() )
        .Aggregate( new[] { "" }.AsEnumerable(), ( a, ca ) => from s in a
                                                              from c in ca
                                                              where !s.Contains( c )
                                                              select s + c.ToString() );
}

http://bbs.wankuma.com/index.cgi?mode=al2&namber=10989&KLOG=25
この手のはこれ以来手続き型で考えるのがめどいです。
華麗なスルーにもめげない。
パフォーマンスもできれば気にしたくない・・・

追記

"abbc"のように同一の文字を含む文字列については順列が生成されませんでした
LINQで順列生成 - Bug Catharsis

あちゃー、全然気づいてませんでした^^;;

http://blogs.wankuma.com/rti/archive/2008/07/22/149730.aspx
こちらのnsharpさんのコメントを参考にindexを匿名型に含めてみました。

static IEnumerable<IEnumerable<T>> GetPermutation<T>( IEnumerable<T> src )
{
    return Enumerable.Range( 0, src.Count() )
        .Select( _ => src )
        .Select( et => et.Select( ( t, i ) => new { t, i } ) )
        .Aggregate( Enumerable.Repeat( Enumerable.Repeat( new { t = default( T ), i = default( int ) }, 0 ), 1 )
            , ( ac, et ) => from a in ac
                            from t in et
                            where !a.Contains( t )
                            select a.Concat( Enumerable.Repeat( t, 1 ) ) )
        .Select( ea => ea.Select( a => a.t ) );
}
static IEnumerable<string> GetPermutation( string str )
{
    return GetPermutation( str.ToCharArray() ).Select( ec => new string( ec.ToArray() ) );
}