- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要通过在基于两个值的表中查找结果来计算结果。表格是这样的:
Bar <10 20 30 40 50 60
Foo
<1.0 .14 .17 .22 .29 .31 .45
1.1 .16 .18 .25 .32 .37 .51
1.2 .19 .20 .29 .37 .41 .53
1.3 .21 .22 .32 .44 .49 .59
1.4 .25 .26 .34 .51 .52 .68
1.5 .29 .31 .39 .53 .54 .71
其中顶部的数字是 Bar 值的范围(其中给定的数字是范围的顶端),左侧下方的数字是 Foo 值的范围。如果我得到 Bar = 24 和 Foo=1.3,查找答案将为 .32。 (当然,上面的数字是虚构的,真正的 table 大约是 25 X 25 大小。)
所有这些都必须在 javascript 中完成,包括存储查找值。
一种可能的方法是将值存储为哈希的哈希:
var lookup = { 1.0: {10:.14, 20: .17, 30:.22}); etc. etc.
其中外部值是 Foo 值,每个 Foo 值映射到一个对象,该对象将 Bar 值映射到答案。凌乱且难以阅读,但相当明确。
另一种方法是将值存储为数组的数组,并从其他地方获取索引。也就是说,我将值存储在顶部:
var BarColumns = [10, 20, 30, 50, 50, 60];
在旁边
var FooRows = [1.0, 1.1, 1.2, 1.3, 1.4, 1.5];
当给定一些值时,我使用上面的列表将它们变成索引,然后使用这些索引在包含答案的二维数组中查找:
var lookup = [
[.14, .17, .22, .29, .31, .45],
[.16, .18, .25. .32, .37, .51],
etc.
];
这与原始表格更接近,但没有标题,表格数据根本不是人类可读的,我认为这更难维护——尤其是当列发生变化时。
另一个选项—— super 显式,在每个对象中重复范围:
var lookup = [{foo:1.0, bar:10, result:.14}, {foo:1.0, bar:20, result: .17}, etc.];
这是非常明确的,但可能会很大,有 25 X 25 个值。
因此,我的问题是:存储原始表的最佳方式是什么,以便我可以使用它进行查找,并且它是人类可读和可维护的?我上面的想法之一?还是完全不同?
我应该添加的要点:1) 实际查找不会经常发生,所以我不太关心性能(在合理范围内),以及 2) 我从客户端,但最好的结果是,如果我可以将最终的 javascript 交给客户端并让他们维护它 - 因此需要考虑可读性。
最佳答案
我建议为这个过程创建一个数据结构。这将涉及一个 LookUp“类”,它将调解一组 DataPoint 对象,这些对象将包含一个范围、一个条形图和一个值。
数据结构
var Range = function(lower,upper){
this.lower = lower;
this.upper = upper;
};
var DataPoint = function(range,bar,value){
this.range = range;
this.bar = bar;
this.value = value;
};
var LookUp = function(){
this.DataPoints = [];
};
LookUp.prototype.add = function(data){
this.DataPoints.push(data);
};
LookUp.prototype.load = function(BarColumns,FooRows,ValueColumns){
ValueColumns = ValueColumns.split(" ").filter(Boolean);
for( var n = 0; n < FooRows.length; n++ ){
var range = 0;
for( var i = 0 ; i < BarColumns.length; i++ ){
var val = parseFloat(ValueColumns[(BarColumns.length * n) + i],10);
var point = new DataPoint(new Range(range,BarColumns[i]),FooRows[n],val);
this.add(point);
range = BarColumns[i];
}
}
};
LookUp.prototype.find = function(x,bar){
for(var i = 0; i < this.DataPoints.length; i++){
var point = this.DataPoints[i];
if( x > point.range.lower && x < point.range.upper && point.bar == bar){
return point.value;
}
}
};
示例数据
注意:valCols 字符串只是网格的复制粘贴。但是,这可以很容易地从 Excel 中重现。在每一行的末尾进行连接,然后在连接列的底部连接所有这些,它将与此处显示的 valCols 相同。
var BarColumns = [10, 20, 30, 50, 50, 60];
var FooRows = [1.0, 1.1, 1.2, 1.3, 1.4, 1.5];
var valCols = ".14 .17 .22 .29 .31 .45 .16 .18 .25 .32 .37 .51 .19 .20 .29 .37 .41 .53 .21 .22 .32 .44 .49 .59 .25 .26 .34 .51 .52 .68 .29 .31 .39 .53 .54 .71";
设置
var lookup = new LookUp();
lookup.load(BarColumns,FooRows,valCols);
使用
console.log(lookup.find(24,1.3));//3.2
alert(lookup.find(24,1.3));//3.2
关于javascript - 二维查找表——如何在 javascript 中存储标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088588/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!