【问题标题】:How to merge two sorted two dimensional arrays without changing their order如何在不改变顺序的情况下合并两个已排序的二维数组
【发布时间】:2016-04-05 15:10:48
【问题描述】:

假设我有按分数排序的男性列表和按分数排序的女性列表(从最高到最低)。 现在我想要一个列表:

Highest score male, Highest score female, 2nd score male, 2nd score female, 3rd score male, 3rd score female, etc...

(注意,如果最高分的女性低于第二分的男性,则不重要。)

我怎么能用 php 做到这一点?

按要求更新:

调用的数组:$arr_sort[$score][$gender]

输入数组1:

$arr_sort[20][male],$arr_sort[18][male],$arr_sort[17][male],$arr_sort[10][male],$arr_sort[9][male],$arr_sort[5][male],$arr_sort[1][male]

输入数组2:

$arr_sort[15][female],$arr_sort[14][female],$arr_sort[13][female]

预期结果:

$arr_sort[20][male],$arr_sort[15][female],$arr_sort[18][male],$arr_sort[14][female],$arr_sort[17][male],$arr_sort[13][female],$arr_sort[10][male],$arr_sort[9][male],$arr_sort[5][male],$arr_sort[1][male]

不同的大小无关紧要,只是混合到每个长度的任意长度,(简而言之,我们需要得到一个结果,这样如果我们从结果中删除“男性”数组,我们将得到原始的“女性”数组,反之亦然。)

【问题讨论】:

  • 你的数组在哪里??需要数组和预期结果。如果某些条件列出了。
  • 两个输入数组已经在预期的结果中,一个是$gender=male,另一个是female。

标签: php arrays sorting


【解决方案1】:

输入数组已经排序

如果您知道如何迭代其中之一,那么您就知道如何迭代 也通过另一个阵列。迭代两者(交替)。

伪代码:

Iterator m = new Iterator(array1);
Iterator f = new Iterator(array2);
List array3 = [];

while (m.hasNext() || f.hasNext() ) {
    if (male.hasNext())
        array3.add( m.next() );
    if (f.hasNext())
        array3.add( f.next() );
}

(编辑)php 示例:

$array3 = [];
$mkeys = array_keys($array1);
$fkeys = array_keys($array2);
$nm = count($mkeys);
$nf = count($fkeys);

for ($i=0; ($i<$nm)||($i<$nf); ++$i) {
    if ($i<$nm) {
        //$array3[] = array($mkeys[$i], $array1[$mkeys[$i]]);
        $array3[$mkeys[$i]] = $array1[$mkeys[$i]];
    }
    if ($i<$nf) {
        //$array3[] = array($fkeys[$i], $array2[$fkeys[$i]]);
        $array3[$fkeys[$i]] = $array2[$fkeys[$i]];
    }
}

php 代码所做的是获取键和值,然后将其添加到关联数组中,而不管键和值是什么。

由于数组已经排序,所有需要发生的就是按照问题中的规范将它们的元素交替添加到合并数组中

注意,事件[原文如此]如果最高分女性低于男性第二分,则不重要

【讨论】:

  • 如果分数不是整数而是浮点数会怎样?你有工作代码吗,实际上,我真的看不出合并部分在哪里?
  • @user1314404 php 代码所做的是获取键和值,将其包装在一个数组中,然后将其添加到位置索引数组中,而不管该键和值是什么。由于数组已经排序,所有需要发生的就是按照问题 Note that, event if highest score female lower than 2nd score male, it is not important 中的规范将它们的元素交替添加到合并数组中
猜你喜欢
  • 2016-05-20
  • 2022-11-21
  • 2016-12-27
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2017-06-17
相关资源
最近更新 更多