按特定标准将列表分组

时间:2016-12-21 09:23:41

标签: list powershell

我有一个超过一千个条目的列表(csv)。 它看起来像这样:

First Name  Surname  Gender  City    Birthdate   Age  Index
----------  -------  ------  ------  ----------  ---  -----
Sam         Smith    f       Munich  06.04.1999  17   1

每个条目代表一个人。 我想用powershell将它们分成几组。

每个小组都必须满足几个标准:

  • 每组最多应包含7人
  • 在每个小组中,应该有来自同一个城市的2至3人
  • 18岁以下的人应按性别分开
  • 18岁以上可能有混合群体

我不需要PowerShell代码的帮助,而不是它背后的逻辑。 到目前为止,我尝试按年龄排序,然后按城市和性别排序。但我仍然不知道如何用正确的标准对其进行分组。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是执行此操作的最佳方法,但我会使用回溯来解决此问题。

https://en.wikipedia.org/wiki/Backtracking

很容易解释。 这就像是一个具有智能的强力算法。

基本工作原理:

1)A组中的一个人  1.1)检查条件(见下文)
 1.2)如果条件为真=>将下一个人带到A组或A组满员时将其带入B组。
   1.1.2)检查条件
   ......等等  1.3)如果条件为假=>退后一步,带走另一个人。如果没有其他人,那么就往后退一步,直到你可以带走另一个人。
(这与简单的蛮力不同,因为算法知道这条路径不会导致解决方案,因此他不会进一步查看。

当一个群组已满时,不要忘记组建新群组。

<强>条件:
来自同一城市的2至3人 18岁以下只有男性/女性 你只需要检查实际的组,因为之前的所有组都没问题,因为你没有修改它们。

<强>结束
一旦每个人都在一个团体中并且所有条件都是真实的,那么你就完成了 或者当您尝试每种组合但没有任何结果导致解决方案时,您也完成了=&gt;不可能解决方案

<强>解决方案:
当存在解决方案时,它将找到一个解决方案。