2016-03-22 8 views
-2

Ich möchte eine Power-Set-Funktion, die String [] als Eingabe akzeptiert und gibt den Ausgang wie unten in EDIT1.Leistung von String-Array (als Eingabe) in C#

Ich kam in dieses

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; 
} 

ich diese Funktion nicht als

können

EDIT1

Above Funktion gibt mir Ausgang für einen Satz sagen { 'a', 'b' } wie

"" 
"a" 
"b" 
"ab" 

Ich brauche die Ausgabe als angezeigt werden

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

Meinst du "params string [] args" als Argument? Dann können Sie 1,2,3, ... n Eingabeargumente verwenden. Für jedes Argument können Sie Ihre aktuelle Implementierung verwenden. –

+0

Ich habe meine Frage bearbeitet. – Artiga

+0

Fragen Sie wirklich nur, wie Sie Elemente zur Liste hinzufügen? –

Antwort

1

Sie können param Schlüsselwort verwenden, um eine Reihe von Zeichenfolgenwerten als Parameter zu senden. Sie können auch als String-Array fungieren. Hier ist eine Beispielimplementierung.

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

Wenn sich die Anzahl der Elemente im Eingabesatz erhöht, wird es schwierig, die Ausgabe zu lesen. wie die Elemente ohne jeden Raum nebeneinander sind. – Artiga