2

我忙于 ac# 项目,我有一个 List{1,2,3}。我想在 List 对象的元素之间形成所有可能的匹配。使用 3 个 foreach 循环很容易做到这一点。

foreach(int one in list)
{
     foreach(int two in list)
     {
           foreach(int three in list)
           {
                  // ...
            }}}

但是如果我不知道列表对象中元素的数量:如何使用 foreach 循环进行所有匹配?所以如果列表中有 6 个元素,那么应该有 6 个底层 foreach 循环......(我不想使用 if 语句,因为它占用了太多空间)如果我使用 foreach 循环,如何动态更改 foreach 循环中使用的变量的名称?(你可以说 :

     String "number"+i = new String("..."); //where i = number (int)

编辑 :

输出应该是:

 1,1,1
 1,2,1
 1,2,2
 1,2,3
 1,3,1
 1,3,2
 1,3,3
 ...
4

2 回答 2

1

根据您的定义,我猜您需要一个电源组。取自此处的示例

public static IEnumerable<IEnumerable<T>> GetPowerSet<T>(List<T> list)
{
        return from m in Enumerable.Range(0, 1 << list.Count)
               select
                   from i in Enumerable.Range(0, list.Count)
                   where (m & (1 << i)) != 0
                   select list[i];
}

private void button1_Click_2(object sender, EventArgs e)
{
        List<int> temp = new List<int>() { 1,2,3};

        List<IEnumerable<int>> ab = GetPowerSet(temp).ToList();
        Console.Write(string.Join(Environment.NewLine,
                                 ab.Select(subset =>
                                 string.Join(",", subset.Select(clr => clr.ToString()).ToArray())).ToArray()));
}

输出:

1
2
1,2
3
1,3
2,3
1,2,3
于 2013-08-20T06:14:14.170 回答
0

另一种方法是获取当前项目和其余项目。然后你也可以做你的事

foreach (var one in ItemList)
{
  var currentItem = one;
  var otherItems = ItemList.Except(currentItem);

  // Now you can do all sort off things
}
于 2013-08-20T06:18:48.050 回答