【问题标题】:How do I sort 12 names into 3 groups of 4, six times? C#如何将 12 个名称分为 3 组 4、6 次? C#
【发布时间】:2016-07-25 12:09:05
【问题描述】:

我有一个 C# 程序,需要将 12 个名称分成 3 组,每组 4 个,共 6 次,然后将它们转储到 CSV 文件中。它使用textbox 将用户输入放入数组并显示在datagrid 中。然后程序读取名称并将它们放入一个 CSV 文件中,并将它们显示到另一个 datagrid 中。下面的代码只对 3 组 4 做一次,它们是按照用户输入的顺序排列的。如何在 3 组 4 组中再获得 5 组随机(或至少有些随机)名称?

public void des()
    {

        for (int x = 0; x < 7; x++)
        {
            //for (int o = 0; o < desArayPlayers.Length; o++)
            {
                int playersCount = 0;
                int k = 0;
                for (int i = 1; i < 4; i++)
                {
                    switch (i)
                    {
                        case 1:
                            k = 0;
                            break;
                        case 2:
                            k = 4;
                            break;
                        case 3:
                            k = 8;
                            break;
                        default:
                            break;
                    }

                    for (int j = k; j < k + 4; j++)
                    {
                        sortingGroupsArayPlayers[playersCount] = "Group " + i.ToString() + "  " + arayPlayers[j];
                        //MessageBox.Show(desArayPlayers[playersCount]);
                        playersCount++;

                    }
                }
            }



        }

    }

【问题讨论】:

  • 排序或随机划分??
  • 参见stackoverflow.com/questions/1287567/… 了解如何生成随机序列。然后分成 3*4 组。
  • for (int x = 0; x &lt; 7; x++) 将循环 7 次而不是 6 次
  • 您希望如何存储组 - 作为数组/数组列表/数组列表/4 个名称的列表,还是作为数组/数组列表/4 个名称的列表? (嗯,这听起来有点混乱......也许更高级别的类包装器会更好)

标签: c# arrays wpf csv datagrid


【解决方案1】:

这将对您的项目进行随机排序,将它们分组为 3 个一组,然后返回组内这些项目的数组集合。

所有这些都发生在 for 循环中,因此您可以根据需要使用它:)

List<List<int[]>> iterationResults = new List<List<int[]>>();
for (int iteration = 0; iteration < 6; iteration++)
{
    iterationResults.Add(collection.OrderBy(item => Guid.NewGuid())
                .Select((item, index) => new { Item = item, GroupKey = index % 4 })
                .GroupBy(item => item.GroupKey)
                .Select(group => group.Select(item => item.Item).ToArray()).ToList());
}

【讨论】:

    【解决方案2】:
    string[] names = new string[] { "john", "bob", "tim","dickson","bobby","tomson","richard","james","bond","rick","simon","ray" };
    Random rnd = new Random();
    string[] MyRandomArray = names.OrderBy(x => rnd.Next()).ToArray();
    List<string[]> Groups = new List<string[]>();
    for (int i = 0; i < 3; i++)//3 groups
       Groups.Add(MyRandomArray.Skip((i)*4).Take(4).Select(x => x.ToString()).ToArray());
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2011-06-14
      • 2020-07-29
      • 2018-03-31
      • 2021-03-06
      相关资源
      最近更新 更多