【问题标题】:Sort an array in the same order as a given array以与给定数组相同的顺序对数组进行排序
【发布时间】:2016-11-30 04:04:41
【问题描述】:

我有一个以任意顺序指定的唯一值数组;我有另一个(几乎)与第一个数组相同的值数组,但有些值可能会丢失,并且它们的排序方式完全不同。
如何以与第一个数组相同的顺序对第二个数组中的值进行排序?

UPD 例如:

数组 1:4、8、2、5、9、3
数组 2:5、8、4、2
所需结果:4、8、2、5

【问题讨论】:

  • 显示两个数组的示例数据以及第二个数组想要的结果数组。
  • 第二个数组的最大大小是多少?
  • @jdigital,它可以很大。

标签: c# .net sorting


【解决方案1】:

您可以检查数组 1 中的每个元素是否存在于数组 2 中并按顺序获取它们:

  var result = array1.Where(a => array2.Contains(a));

【讨论】:

    【解决方案2】:
    int[] array1 = new int[] { 4, 8, 2, 5, 9, 3 };
    int[] array2 = new int[] { 5, 8, 4, 2 };
    
    
    array2 = array1.Intersect(array2).ToArray();
    

    【讨论】:

    • @user626528 这个答案对于大数组来说效率更高,因为它使用Set internally 作为第二个数组
    【解决方案3】:

    好吧,让我们考虑逻辑而不是代码。

    如果我们考虑第二个数组是第一个数组的子集的情况,我们可以做一件事。让我们创建一个大小为第一个数组的布尔类型数组。考虑第二个数组的每个元素并遍历第一个数组。如果找到匹配项,则将相应的布尔索引设为 TRUE。最后你会得到一个 TRUE 和 FALSE 组合的布尔数组。然后您可以打印布尔值 TRUE 的第一个数组的所有索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      相关资源
      最近更新 更多