Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 排序数组:使用名称前后如何获取位置?as3_Arrays_Actionscript 3_Flash - Fatal编程技术网

Arrays 排序数组:使用名称前后如何获取位置?as3

Arrays 排序数组:使用名称前后如何获取位置?as3,arrays,actionscript-3,flash,Arrays,Actionscript 3,Flash,我一直在做一个项目,到目前为止,堆栈溢出帮助我解决了一些问题,所以我非常感谢 我的问题是: 我有这样一个数组: var records:Object = {}; var arr:Array = [ records["nh"] = { medinc:66303, statename:"New Hampshire"}, records["ct"] = { medinc:65958, statename:"Connecticut"}, records["nj"] = { medinc:65173,

我一直在做一个项目,到目前为止,堆栈溢出帮助我解决了一些问题,所以我非常感谢

我的问题是:

我有这样一个数组:

var records:Object = {};

var arr:Array = [
records["nh"] = { medinc:66303, statename:"New Hampshire"},
records["ct"] = { medinc:65958, statename:"Connecticut"},
records["nj"] = { medinc:65173, statename:"New Jersey"},
records["md"] = { medinc:64596, statename:"Maryland"},
arr.sortOn("medinc", Array.NUMERIC);
arr.reverse();
等等。。。适用于所有50个州。然后我将数组按逆数值排序(降序),如下所示:

var records:Object = {};

var arr:Array = [
records["nh"] = { medinc:66303, statename:"New Hampshire"},
records["ct"] = { medinc:65958, statename:"Connecticut"},
records["nj"] = { medinc:65173, statename:"New Jersey"},
records["md"] = { medinc:64596, statename:"Maryland"},
arr.sortOn("medinc", Array.NUMERIC);
arr.reverse();
我可以调用记录的名称(即新泽西的“nj”),然后从数组中记录上方和下方的数字位置获取值吗

基本上,medinc是美国各州的中等收入,我试图展示一个排名系统。。。例如,用户将单击Texas,它将显示Texas的medinc值,以及数组中排名在下一位的州和排名在上一位的州


谢谢你的帮助

如果知道对象,可以使用array.indexOf()

var索引:int=records.indexOf(records[“nj”]);
var以上:对象;
变量如下:对象;
如果(index+10){//请确保您的
以下=记录[索引-1];
}

如果知道对象,可以使用array.indexOf()

var索引:int=records.indexOf(records[“nj”]);
var以上:对象;
变量如下:对象;
如果(index+10){//请确保您的
以下=记录[索引-1];
}

根据我对您数据的理解,我认为这是答案

var index:int = arr.indexOf(records["nh"]);
这将获得单击记录的索引,然后查找下面和上面的索引:

var clickedRecord:Object = arr[index]
var higherRecord:Object = arr[index++]
var lowerRecord:Object = arr[index--]

希望这能回答您的问题

我认为这是基于我对您数据的理解得出的答案

var index:int = arr.indexOf(records["nh"]);
这将获得单击记录的索引,然后查找下面和上面的索引:

var clickedRecord:Object = arr[index]
var higherRecord:Object = arr[index++]
var lowerRecord:Object = arr[index--]

希望这能回答您的问题

您真的需要对记录进行哈希吗

若否,只需将键移动到记录字段,并将记录更改为简单数组:

var records: Array = new Array();
records.push({ short: "nh", medinc:66303, statename:"New Hampshire"}),
records.push({ short: "ct", medinc:65958, statename:"Connecticut"}),
....
这使您有机会为State创建类,将数组更改为Vector,并使所有这些类型都是安全的,这总是好的

如果您真的需要这些键,您可以像现在一样添加上面的对象(带有“short”字段)(可能使用一些帮助函数,这将有助于避免键入shortname两次,比如addState(records,data){records[data.short]=data})


最后,您还可以将这些记录保存在两个对象(或者一个对象和一个数组,或者任何您需要的东西)中。如果只创建一次state对象并将引用保留在array/object/vector中,这将不会很昂贵。如果您需要经常在不同的键上对状态进行排序,这将是一个好主意。

您真的需要对记录进行哈希吗

若否,只需将键移动到记录字段,并将记录更改为简单数组:

var records: Array = new Array();
records.push({ short: "nh", medinc:66303, statename:"New Hampshire"}),
records.push({ short: "ct", medinc:65958, statename:"Connecticut"}),
....
这使您有机会为State创建类,将数组更改为Vector,并使所有这些类型都是安全的,这总是好的

如果您真的需要这些键,您可以像现在一样添加上面的对象(带有“short”字段)(可能使用一些帮助函数,这将有助于避免键入shortname两次,比如addState(records,data){records[data.short]=data})


最后,您还可以将这些记录保存在两个对象(或者一个对象和一个数组,或者任何您需要的东西)中。如果只创建一次state对象并将引用保留在array/object/vector中,这将不会很昂贵。如果您需要经常在不同的键上对状态进行排序,这将是一个不错的主意。

这并不是一个设置数据的好方法-输入太多(您一遍又一遍地重复“records”、“medinc”、“statename”,而您肯定可以避免它,例如:

var records:Array = [];
var states:Array = ["nh", "ct", "nj" ... ];
var statenames:Array = ["New Hampshire", "Connecticut", "New Jersey" ... ];
var medincs:Array = [66303, 65958, 65173 ... ];
var hash:Object = { };

function addState(state:String, medinc:int, statename:String, hash:Object):Object
{
    return hash[state] = { medinc: medinc, statename: statename };
}

for (var i:int; i < 50; i++)
{
    records[i] = addState(states[i], medincs[i], statenames[i], hash);
}

然后,
incomeHash[medinc]
会在O(1)倍内给出州的收入。

这并不是一个很好的设置数据的方法-输入太多(你一次又一次地重复“records”、“medinc”、“statename”,而你肯定可以避免它,例如:

var records:Array = [];
var states:Array = ["nh", "ct", "nj" ... ];
var statenames:Array = ["New Hampshire", "Connecticut", "New Jersey" ... ];
var medincs:Array = [66303, 65958, 65173 ... ];
var hash:Object = { };

function addState(state:String, medinc:int, statename:String, hash:Object):Object
{
    return hash[state] = { medinc: medinc, statename: statename };
}

for (var i:int; i < 50; i++)
{
    records[i] = addState(states[i], medincs[i], statenames[i], hash);
}

然后,
incomeHash[medinc]
将在O(1)时间内按收入向您提供状态信息。

感谢您的回复。这将返回职位编号。我希望返回“medinc”中定义的值然后只需执行下面的
操作。medinc
或上面的
操作。medinc
索引是位置号,上面的
和下面的
是数组中下一个最高和最低对象的实际对象。请记住,如果不应用,下面和上面的对象将为空le(当前项目是数组的顶部或底部)感谢您的回复。这将返回位置号。我希望返回“medinc”中定义的值然后只需执行下面的
操作。medinc
或上面的
操作。medinc
索引是位置号,上面的
和下面的
是数组中下一个最高和最低对象的实际对象。请记住,如果不应用,下面和上面的对象将为空le(当前项目是数组的顶部或底部)感谢您的回复。但我相信这将返回职位编号?我希望返回数组中为所选职位定义的“medinc”值。例如,如果选择了新罕布什尔州的“nh”,它将返回“medinc”位于index++和index位置的状态——而不是位置号本身——请参见,第一行实际返回数字,然后使用该数字通过
var medincUpper:int=arr[index-1]['medinc']从“arr”的上一个和下一个元素检索“medinc”值
下一步也是如此。但一定要检查数组边界,否则程序会抛出异常