arrays - 将行和列值转换为具有分组值的多个数组的索引
问题描述
这种问题经常出现,但请耐心等待,它有一个转折点。
假设您有以下数组...
[A, B, C, D, E, F, G, H , I, J, K, L]
您将其映射到这样的网格
| 0 1 2 3
----------
0| A D G J
1| B E H K
2| C F I L
如果您需要查找网格中任何项目的原始数组索引,可以使用此公式(行和列从零开始)。
col * numRows + row
因此,位于2,2
网格坐标处的“I”的索引将是...
2 * 3 + 2 = 8
简单!所以现在想象你有两个数组......
[A, B, C, D, E, F, G, H , I, J, K, L]
[@, &, *, #, €, %, ƒ, œ, ≈, ∑, ß, Ω ]
它以这样的网格布局......
0 1 2 3 4 5 6 7
-----------------
0| A @ D # G ƒ J ∑
1| B & E € H œ K ß
2| C * F % I ≈ L Ω
现在您需要约束列索引,以便 0 & 1 = 0、2 & 3 = 1 等。为此,我想出了这个公式。
Math.floor(column / numArrays) * numRows + row;
现在让我们把它调高。想象一下你有这两个数组(每个数组 16 项)
[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8]
[100,100,200,200,300,300,400,400,500,500,600,600,700,700,800,800]
但是现在,您希望网格显示已对值求和的行
0 1 2 3
----------------
0| 2 200 10 1000
1| 4 400 12 1200
2| 6 600 14 1400
3| 8 800 16 1600
并且您想在原始数组中找到第一个索引,例如值 8 的索引将是 15,或者值 400 的索引将是 2。
我做了一个天真的假设,即您可以将行和列索引乘以chunk size
我用来对值求和的值。然而,这是完全错误的。
那么,当网格由多个数组组成时,是否可以使用行和列索引在平面数组中导出索引,这些数组的值已经交错并求和(或者我称之为“折叠”)?
更新:我已经取得了一些进展。如果我的第二个公式是函数
func coordsToIndex(col, row, totalDataSets, totalRows) {
return Math.floor(col / totalDataSets) * totalRows + row;
}
如果变量chunkSize
表明有多少个值被加在一起,那么这个
coordsToIndex(col, row, totalDataSets, totalRows) * chunkSize
接近了,但结果索引总是比块大小太大。所以!
(coordsToIndex(col, row, totalDataSets, totalRows) * chunkSize) - chunkSize
给我正确的值,但只有当 chunkSize 大于零时,这导致我......
index = (coordsToIndex(col, row, totalDataSets, totalRows) * chunkSize)
realIndex = chunkSize > 1
? (index * chunkSize) - chunkSize
: calculatedIndex;
我感觉到有一种更简洁的方法可以做到这一点,而且我遗漏了一些明显的东西。
解决方案
推荐阅读
- javascript - 任何好的 javascript 范围荧光笔
- django - Django 测试表单集使用什么形式
- javascript - Slick 插件在我的网站上看起来很奇怪。有人知道修复吗?
- sql-server - 对 Spring 批处理正在处理的表运行选择查询时,数据库查询挂起
- php - WordPress Ajax 成功,但功能似乎没有运行
- c# - 错误 CS0138:“使用命名空间”指令只能应用于命名空间;'碰撞2D'
- c - MPI_Isend/Irecv 仅在 for 循环的第一次迭代中执行。是什么阻止它在循环的后续迭代中执行
- r - 颠倒某些数据框列的顺序
- android - 如何在不影响下面的 ViewPager 的情况下显示和隐藏标题上的视图?
- css - 如何在首页而不是整页上隐藏父级的子级