在c#中生成特定的组合,以创建我的预期输出

在c#中生成特定的组合,以创建我的预期输出,c#,C#,我有两个列表,每个列表中有多个数据。并需要以下输出,即列表的组合值 下面是我正在尝试的代码片段: public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> source, int n) { if (n == 0) yield return Enumerable.Empty<T>(); int count = 1;

我有两个列表,每个列表中有多个数据。并需要以下输出,即列表的组合值


下面是我正在尝试的代码片段:

public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> source, int n)
{
    if (n == 0) yield return Enumerable.Empty<T>();

    int count = 1; 
    foreach (T item in source)
    {
        foreach (var innerSequence in source.Skip(count).Combinations(n - 1)) 
        {
            yield return new T[] { item }.Concat(innerSequence);}count++;
        } 
    }
}

public static IEnumerable<IEnumerable<T>> AllCombinations<T>(this IList<T> source)
{
    IEnumerable<IEnumerable<T>> output = Enumerable.Empty<IEnumerable<T>>(); 
    for (int i = 0; i < source.Count; i++)
    {
        output = output.Concat(source.Combinations(i));
    }
    return output;
}
公共静态IEnumerable组合(此IEnumerable源代码,int n)
{
如果(n==0),则返回Enumerable.Empty();
整数计数=1;
foreach(源中的T项)
{
foreach(source.Skip(count).compositions中的var innerSequence(n-1))
{
返回新的T[]{item}.Concat(innerSequence);}count++;
} 
}
}
公共静态IEnumerable所有组合(此IList源)
{
IEnumerable输出=Enumerable.Empty();
for(int i=0;i

List lstCodes=新列表();
List lstCodeOut=新列表();
如果(!String.IsNullOrEmpty(txtbox1.Text))
lstCodes.AddRange(txtbo‌​x1.Text.Split(',').T‌​奥利斯特());
如果(!String.IsNullOrEmpty(txtbox2.Text))
lstCodes.AddRange(txtbo‌​x2.Text.Split(',').T‌​奥利斯特());
如果(!String.IsNullOrEmpty(txtbox3.Text))
lstCodes.AddRange(txtbo‌​x3.Text.Split(',').T‌​奥利斯特());
foreach(lstCodes.AllCombinations()中的变量序列)
{
添加(string.Join(“,”,sequence));
}
Text=string.Join(Environment.NewLine,lstCodeOut);

最直接的方法是使用基本的foreach循环;这假定没有重复项:

var l1 = new List<string> { "A", "B", "C" };
var l2 = new List<string> { "D", "E" };

var result = new HashSet<string>();

foreach( string s1 in l1 )
{
    result.Add( s1 );

    foreach( string s2 in l2 )
    {
        result.Add( s2 );
        result.Add( $"{s1},{s2}" );
    }
}
var l1=新列表{“A”、“B”、“C”};
var l2=新列表{“D”,“E”};
var result=new HashSet();
foreach(l1中的字符串s1)
{
结果:添加(s1);
foreach(l2中的字符串s2)
{
结果:添加(s2);
添加($“{s1},{s2}”);
}
}
从这里开始,我们可以通过连接两个列表,然后将这两个列表合并到组合中,重构以消除内部循环中的一些冗余:

var l1 = new List<string> { "A", "B", "C" };
var l2 = new List<string> { "D", "E" };

var result = new List<string>( l1.Concat( l2 ) );

foreach( string s1 in l1 )
{
    foreach( string s2 in l2 )
    {
        result.Add( $"{s1},{s2}" );
    }
}
var l1=新列表{“A”、“B”、“C”};
var l2=新列表{“D”,“E”};
var结果=新列表(l1.Concat(l2));
foreach(l1中的字符串s1)
{
foreach(l2中的字符串s2)
{
添加($“{s1},{s2}”);
}
}
从这里,我们可以再次重构为LINQ语句:

var l1 = new List<string> { "A", "B", "C" };
var l2 = new List<string> { "D", "E" };

string[] result = l1
    .Concat( l2 )
    .Concat( l1.SelectMany( s1 => l2, ( s1, s2 ) => $"{s1},{s2}" ) )
    .ToArray();
var l1=新列表{“A”、“B”、“C”};
var l2=新列表{“D”,“E”};
字符串[]结果=l1
.Concat(l2)
.Concat(l1.SelectMany(s1=>l2,(s1,s2)=>$“{s1},{s2}”))
.ToArray();

您可以从
for
循环或
foreach
开始,稍后尝试一些LINQ。到目前为止,你有什么?你在哪里被卡住了?请注意,StackOverflow不是免费的代码编写服务。在询问之前先了解基本知识。这里是我正在尝试的代码片段这里是我正在尝试的代码片段公共静态IEnumerable组合(此IEnumerable源,int n){如果(n==0)返回Enumerable.Empty();int count=1;foreach(源中的T项){foreach(var innerSequence in source.Skip(count).Combinations(n-1)){yield return new T[]{item}.Concat(innerSequence);}count++;}}}}public static IEnumerable AllCombinations(此IList源){IEnumerable output=Enumerable.Empty();for(int i=0;ivar l1 = new List<string> { "A", "B", "C" }; var l2 = new List<string> { "D", "E" }; var result = new List<string>( l1.Concat( l2 ) ); foreach( string s1 in l1 ) { foreach( string s2 in l2 ) { result.Add( $"{s1},{s2}" ); } }
var l1 = new List<string> { "A", "B", "C" };
var l2 = new List<string> { "D", "E" };

string[] result = l1
    .Concat( l2 )
    .Concat( l1.SelectMany( s1 => l2, ( s1, s2 ) => $"{s1},{s2}" ) )
    .ToArray();