2016-03-22 18 views
-2

文字列[]を入力として受け取り、EDIT1の下に示すように出力を与えるパワーセット関数を作成したいとします。私は機能上C#の文字列配列のパワーセット

EDIT1

としてこの機能を使用することはできません。この

private static List<string> PowerSet(string[] input) 
{ 
    int n = input.Length; 
    // Power set contains 2^N subsets. 
    int powerSetCount = 1 << n; 
    var ans = new List<string>(); 

    for (int setMask = 0; setMask < powerSetCount; setMask++) 
    { 
     var s = new StringBuilder(); 
     for (int i = 0; i < n; i++) 
     { 
      // Checking whether i'th element of input collection should go to the current subset. 
      if ((setMask & (1 << i)) > 0) 
      { 
       s.Append(input[i]); 
      } 
     } 
     ans.Add(s.ToString()); 
    } 

    return ans; 
} 

に出くわした

は私のセットのための出力を与える 'A'、 'B' {言います}を

"" 
"a" 
"b" 
"ab" 

として表示する必要があります。

{} 
{"a"} 
{"b"} 
{"a","b"} 
+0

"params string [] args"を引数として使用しますか?次に1,2,3、... n入力引数を使用できます。各引数について、現在の実装を使用できます。 –

+0

私は自分の質問を編集しました。 – Artiga

+0

あなたは本当にリストに項目を追加する方法について本当に尋ねていますか? –

答えて

1

paramキーワードを使用して、一連の文字列値をパラメータとして送信できます。文字列配列としても機能します。ここにサンプル実装があります。

static void Main(string[] args) 
{ 
    var list = PowerSet("node1", "node2", "node3"); 
    foreach (var item in list) 
    { 
     Console.WriteLine(item); 
    } 
    Console.ReadLine(); 
} 

private static List<string> PowerSet(params string[] input) 
{ 
    if (input == null) 
    { 
     throw new ArgumentNullException("input"); 
    } 

    // Power set contains 2^N subsets. 
    var powerSetCount = 1 << input.Length; 

    var returnValue = new List<string>(); 

    for (var setMask = 0; setMask < powerSetCount; setMask++) 
    { 
     var stringBuilder = new StringBuilder(); 
     for (var i = 0; i < input.Length; i++) 
     { 
      // Checking whether i'th element of input collection should go to the current subset. 
      if ((setMask & (1 << i)) > 0) 
       stringBuilder.Append(input[i]); 
     } 
     returnValue.Add(stringBuilder.ToString()); 
    } 
    return returnValue; 
} 
+0

入力セットの要素数が増えると、出力を読みにくくなります。要素がスペースを置かずに隣接しているからです。 – Artiga