根据值对二维数组排序

大卫

我有一个巨大的2D阵列,带有六角形顶点的coordiantes。看起来像这样:

let arr = [
  [150.3073578016,95.9815785601,149.1526572632,97.9815785601,150.3073578016,99.9815785601,152.6167588783,99.9815785601,153.7714594167,97.9815785601,152.6167588783,95.9815785601],
  [120.5738189383,54.4815785601,121.7285194767,54.4815785601,122.3058697459,55.4815785601,121.7285194767,56.4815785601,120.5738189383,56.4815785601,119.9964686691,55.4815785601],
  [119.9964686691,78.4815785601,122.3058697459,78.4815785601,123.4605702842,80.4815785601,122.3058697459,82.4815785601,119.9964686691,82.4815785601,118.8417681307,80.4815785601],
  [115.6663416502,100.9815785601,117.9757427269,100.9815785601,119.1304432653,102.9815785601,117.9757427269,104.9815785601,115.6663416502,104.9815785601,114.5116411118,102.9815785601],
  [124.326595688,100.9815785601,126.6359967648,100.9815785601,127.7906973032,102.9815785601,126.6359967648,104.9815785601,124.326595688,104.9815785601,123.1718951496,102.9815785601],
];

六角形有6个顶点。每个子数组都是一个六边形,并具有每个顶点的x和y坐标。

因此每个子数组包含12个值。

注意:并非所有六边形都具有相同的尺寸!

这样的结构(UNSORTED!):[x,y,x,y,x,y,x,y,x,y,x,y];

我现在的问题是:如何对2d数组排序,以使其按行从左上角到右下角排序? 在此处输入图片说明

我的想法是仅对每个子值求和,但是并没有给我想要的顺序。

function sortHexagons(hexCoordinates) {
  function sort(arr) {
    const reducer = (accumulator, currentValue) => accumulator + currentValue;
    return arr.reduce(reducer);
  }
  hexCoordinates.sort((a, b) => sort(a) - sort(b));
}
bm13563

这是未经测试的尝试。我平均每个六角形的x和y值,然后按y降序排列,然后按x升序排列。假设您的六边形的均匀性。

    var arr = [
    [150.3073578016,95.9815785601,149.1526572632,97.9815785601,150.3073578016,99.9815785601,152.6167588783,99.9815785601,153.7714594167,97.9815785601,152.6167588783,95.9815785601],
    [120.5738189383,54.4815785601,121.7285194767,54.4815785601,122.3058697459,55.4815785601,121.7285194767,56.4815785601,120.5738189383,56.4815785601,119.9964686691,55.4815785601],
    [119.9964686691,78.4815785601,122.3058697459,78.4815785601,123.4605702842,80.4815785601,122.3058697459,82.4815785601,119.9964686691,82.4815785601,118.8417681307,80.4815785601],
    [115.6663416502,100.9815785601,117.9757427269,100.9815785601,119.1304432653,102.9815785601,117.9757427269,104.9815785601,115.6663416502,104.9815785601,114.5116411118,102.9815785601],
    [124.326595688,100.9815785601,126.6359967648,100.9815785601,127.7906973032,102.9815785601,126.6359967648,104.9815785601,124.326595688,104.9815785601,123.1718951496,102.9815785601],
  ];

// get the average x and y values of each array
var averageTracker = []
for (let x = 0; x < arr.length; x++) {
    var xSum = 0;
    var ySum = 0;
    for (let y = 0; y < arr[x].length; y++) {
        if (y % 2 == 0) {
            xSum = xSum + arr[x][y];
        } else {
            ySum = ySum + arr[x][y];
        }
    }
    // save the average x and y value of a hexagon against the index of the hexagon
    var indexTracker = {
        arrayPosition: x,
        xAverage: xSum / (arr[x].length / 2),
        yAverage: ySum / (arr[x].length / 2),
    };
    averageTracker.push(indexTracker);
}

// sort the hexagons by y descending, followed by x ascending
averageTracker.sort(function (a, b) {
    return b.yAverage - a.yAverage || a.xAverage - b.xAverage;
});

// get the hexagon out of the original array by index
var newArr = [];
for (let x = 0; x < averageTracker.length; x++) {
    newArr.push(arr[averageTracker[x].arrayPosition]);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据列对二维int数组进行排序的过程

来自分类Dev

如何根据一维数组值获取二维数组值?

来自分类Dev

PHP 二维数组:根据二维数组中的值使用户输入 2 减去用户输入 1

来自分类Dev

我如何排序二维数组?

来自分类Dev

按行排序二维数组

来自分类Dev

气泡排序二维数组

来自分类Dev

快速排序二维数组

来自分类Dev

二维数组中的深度排序

来自分类Dev

对二维数组行进行排序

来自分类Dev

二维数组排序,空白乱序

来自分类Dev

冒泡排序二维数组

来自分类Dev

合并排序二维数组

来自分类Dev

如何对二维数组进行排序?

来自分类Dev

根据一维数组的索引和值构造二维numpy数组

来自分类Dev

根据等级打印二维数组

来自分类Dev

根据到平均数组的距离对二维数组进行排序

来自分类Dev

如何在java中根据列(升序)对二维数组进行排序

来自分类Dev

二维数组带来垃圾值

来自分类Dev

根据第一个索引值对二维列表进行排序

来自分类Dev

如何对适合其他值的二维数组中的值进行排序?

来自分类Dev

使用usort()对具有二维排序条件的二维数组进行排序

来自分类Dev

比较二维数组和一维数组的值

来自分类Dev

VBA排序二维数组(按字母顺序排列的文本值)——优化

来自分类Dev

Python:按数组长度对二维数组排序?

来自分类Dev

如何对二维数组排序并跟踪数组索引?

来自分类Dev

根据二维数组中innerarray的值删除outerarray的元素

来自分类Dev

如何在python中对二维数组进行排序

来自分类Dev

在C#中对更大的二维数组进行排序

来自分类Dev

在C ++中排序我的二维数组