我有一个包含大约250个条目的数组,每个条目都有自己的值数组。每个条目都是地图上的一个点,每个数组都包含以下信息:
名, 这个点可以连接到的另一个数组, 纬度, 经度, 名字的缩写, 一个布尔值, 和另一个布尔
该数组由我团队中的另一位开发人员编写,他已经编写了这样的文字:
names[0]=new Array;
names[0][0]="Campus Ice Centre";
names[0][1]= new Array(0,1,2);
names[0][2]=43.95081811364498;
names[0][3]=-78.89848709106445;
names[0][4]="CIC";
names[0][5]=false;
names[0][6]=false;
names[1]=new Array;
names[1][0]="Shagwell's";
names[1][1]= new Array(0,1);
names[1][2]=43.95090307839151;
names[1][3]=-78.89815986156464;
names[1][4]="shg";
names[1][5]=false;
names[1][6]=false;
我可能会亲自写下这样的内容:
var names = []
names[0] = new Array("Campus Ice Centre", new Array[0,1,2], 43.95081811364498, -78.89848709106445, "CIC", false, false);
names[1] = new Array("Shagwell's", new Array[0,1], 43.95090307839151, -78.89815986156464, 'shg", false, false);
他们当然都完美无缺,但我想知道的是:
1)实际处理的时间比另一个要长吗? 2)假设我的同一个版本的紧凑性有好处,我是不正确的?
我只是有点担心他的3000行代码而不是我的3-400才能得到相同的结果。
提前感谢任何指导。
答案 0 :(得分:6)
您真正想要做的是定义一种自定义数据类型,以更准确地表示您的数据。我不确定你使用的语言是什么,所以这里有一些伪代码:
class Location
{
double latitude;
double longitude;
String Name;
String Abbreviation;
bool flag1;//you should use a better name
bool flag2;
}
然后你可以创建一个数组来保存所有的Location对象,它将更具可读性和可维护性。
Locations = new Array;
Locations[0] = new Location("Shagwell's",...);
....
=== EDIT ===
因为您说您使用的是javascript,所以最佳做法可能是将您的数据存储在json文本文件中,这样做的好处是可以从代码文件中删除数据并拥有一个非常容易编辑的数据源(如果您需要)做出改变。
你的JSON文件看起来像这样
[{"lat":"23.2323", "long":"-72.3", "name":"Shagwell's" ...},
{"lat":"26.2323", "long":"-77.3", "name":"loc2" ...},
...]
然后,您可以将json文本存储在Web服务器上的可访问位置,例如“data.json”,然后如果您使用的是jquery,则可以通过执行以下操作来加载它:
$.getJSON("data.json", function(data) { //do something with the data});
答案 1 :(得分:1)
对于结构化数据,就像您的例子一样,您和您的同事都相对“错误”。从事物的外观来看,你应该已经实现了一系列结构,当然假设你呈现的数据真的是无序的,我愿意猜测它可能不是。数组经常被使用,因为它们是我们学习的第一个数据结构,但通常不是最佳选择。
至于性能,数据访问代码通常归结为数据类型本身。坦率地说,除非您正在处理巨大的数据集或字面上的实时应用程序,否则性能应该是一个非问题。
关于你发布的两个例子,在编译完成之后,它们几乎完全相同。
答案 2 :(得分:0)
我个人觉得前者更具可读性。从绩效角度来看,差异可能很小。
答案 3 :(得分:0)
将其他答案放在一边(虽然我同意其他人你需要结构),你的同事方式对我来说似乎更好。就像Serapth所说,编译器会优化差异,原始代码具有更好的可读性。