2016-01-24 3 views
3

У меня есть метод, который принимает строку. Строка построена из постоянного значения и 2 bools, 2 константных int и int, которые могут быть 10,20 или 30. Это будет строка, в которой параметры разделяются символом подчеркивания.C# Создать строки со всеми возможными комбинациями

Пример:

string value = "horse" 
string combination1 = value+"_true_false_1_1_20"; 
dostuff(combination1); 

мне нужно запустить каждую возможную комбинацию через

Как принимать это постоянное значение и запустить его с помощью метода со всеми возможными комбинациями?

Строка постройка: «VALUE_BOOL1_BOOL2_CONSTINT1_CONSTINT2_INT1»

Possibilities 
    VALUE = Horse 
    BOOL1 = True, False 
    BOOL2 = True, False 
    CONSTINT1 = 1 
    CONSTINT2 = 1, 
    INT1 = 10, 20, 30 

Как я могу принять строку предопределенного значения и создать все возможные комбинации и запускать их с помощью метода DoStuff (строки комбинации)?

+0

Попробуйте прочитать о петлях: https://msdn.microsoft.com/en-us/library/f0e10e56%28v=vs.90%29.aspx – pseudoDust

ответ

4

Вы можете сделать это с очень читаемым заявлением LINQ без использования петель:

public static List<String> Combis(string value) 
{ 
    var combis = 
    from bool1 in new bool[] {true, false} 
    from bool2 in new bool[] {true, false} 
    let i1 = 1 
    let i2 = 1 
    from i3 in new int[] {10, 20, 30} 
    select value + "_" + bool1 + "_" + bool2 + "_" + i1 + "_" + i2 + "_" + i3; 

    return combis.ToList(); 
} 

EDIT: Имейте в виде, что несколько массивов должны быть созданы в вышеуказанном растворе, потому что the in-clause is evaluated multiple times. Вы можете изменить его в дальнейшем, чтобы обойти это:

public static List<String> Combis(string value) 
{ 
    bool[] bools = new[] {true, false}; 
    int[] ints = new[] {10, 20, 30}; 

    var combis = 
     from bool1 in bools 
     from bool2 in bools 
     let i1 = 1 
     let i2 = 1 
     from i3 in ints 
     select value + "_" + bool1 + "_" + bool2 + "_" + i1 + "_" + i2 + "_" + i3; 

    return combis.ToList(); 
} 
+0

Пожалуйста. Вероятно, вы также должны следить за моим [последующим вопросом] (http://stackoverflow.com/questions/34975128/how-often-is-the-in-clause-evaluated-in-a-linq -query) в котором обсуждается эффективность этого метода. –

Смежные вопросы