使用两个变量之间的每个组合生成列表

时间:2018-04-08 07:37:13

标签: c# arrays list

如何在List<string>A00B00之间的每个组合中自动生成A100B100

我认为这将是10,100件。

所以List将包含:

A00B00
A00B01
A00B02
...
A01B00
A01B01
A01B02
...
A100B98
A100B99
A100B100

需要保持AxxBxx格式。我不希望它像0A01B0那样被扰乱。

3 个答案:

答案 0 :(得分:1)

由于您有一系列0-100而且您只有AB作为前缀,我们会在ints中填充两个列表0 to 100的列表然后使用System.Linq查找所有组合,然后附加到带有分隔符的list。现在只需更换分隔符。

有很多方法可以解决这个问题,我建议使用System.Linq

public static IEnumerable<string> FindAllCombinationsAnotherWay()
{
    List<int> ListOne = Enumerable.Range(1, 100).ToList();
    List<int> ListTwo = Enumerable.Range(1, 100).ToList();

    var result = ListOne.SelectMany((a, indexA) =>
             ListTwo.Where((b, indexB) =>
                    ListTwo.Contains(a) ? !b.Equals(a) && indexB > indexA
                                      : !b.Equals(a))
                  .Select(b => string.Format("A{0:00}B{1:00}", a, b)));

    return result.Distinct();
}

答案 1 :(得分:1)

您可以轻松实现这一目标:

var result = new List<string>();
foreach (var i in Enumerable.Range(0, 101))
{
    foreach (var j in Enumerable.Range(0, 101))
    {
        result.Add($"A{i:00}B{j:00}");
    }
}

答案 2 :(得分:1)

此类组合称为Cartesian products,这是另一种LINQ解决方案:

var lst = Enumerable.Range(0, 101)
                  .SelectMany(a => Enumerable.Range(0, 101).Select(b => $"A{a:00}B{b:00}"))
                  .ToList();