搜索匹配的数组元素(转)

本文介绍如何使用for循环结合break语句及ArrayUtilities类方法快速查找数组中的特定元素,包括首个匹配项、末尾匹配项和所有匹配项的下标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要找出指定值得数组元素
解决办法
用for 语句和break 语句就能找到匹配的元素。另外用ArrayUtilities.findMatchIndex( ),ArrayUtilities.findLastMatchIndex( ), 和ArrayUtilities.findMatchIndices( ) 方法
讨论
用for循环查找第一个匹配的元素后,用break立即返回,这样就实现功能了。
break应该在if语句里进行判断,是否找到匹配元素,找到则执行break推出循环,否则继续查找。

var letters:Array = ["a""b""c""d""a""b""c""d"];
// 指定要搜索的内容
var match:String = "b";
for (var i:int = 0; i < letters.length; i++) {
// 检测当前元素是否匹配
if (letters[i] == match) {
trace("Element with index " + i +
" found to match " + match);
break;
}
}


也可以找到匹配的最后一个元素,这就需要倒序遍历数组:

var letters:Array = ["a""b""c""d""a""b""c""d"];
var match:String = "b";
for (var i:int = letters.length - 1; i >= 0; i--) {
if (letters[i] == match) {
trace("Element with index " + i +
" found to match " + match);
break;
}
}


使用自定义类ArrayUtilities 类更简单,它在ascb.util 包中,首先导入它:

import ascb.util.ArrayUtilities;


ArrayUtilities 类有三个方法来查找匹配的元素findMatchIndex( ), findLastMatchIndex( ), 和findMatchIndices( )。findMatchIndex( ) 方法至少需要两个参数:一个指向数组的引用和需要匹配的值,返回第一个匹配的元素下标,如果找不到返回-1:

var letters:Array = ["a""b""c""d"];
trace(ArrayUtilities.findMatchIndex(letters, "b"));
// 显示: 1
trace(ArrayUtilities.findMatchIndex(letters, "r"));
// 显示: -1


也可以指定搜索的起始下标作为第三个参数:

var letters:Array = ["a""b""c""d""a""b""c""d"];
trace(ArrayUtilities.findMatchIndex(letters, "a", 1));
// 显示: 4


如果第三个参数为true,则返回部分匹配的元素:

var words:Array = ["bicycle""baseball""mat""board"];
trace(ArrayUtilities.findMatchIndex(words, "s"true));
// 显示: 1


如果你想部分匹配又想指定起始搜索下标,可以把起始下标作为第四个参数。
findLastMatchIndex( ) 方法返回最后一个匹配的元素下标
findMatchIndices( ) 方法返回所有匹配的元素下标数组:

var letters:Array = ["a""b""c""d""a""b""c""d"];
trace(ArrayUtilities.findMatchIndices(letters, "b"));
// 显示: 1,5


也可以设定为部分匹配,指定第三个参数为true:

var words:Array = ["bicycle""baseball""mat""board"];
trace(ArrayUtilities.findMatchIndices(words, "b"true));
// 显示: 0,1,3


ArrayUtilities 方法内部也是用for循环来实现的,现在我们看看代码,下面是findMatchIndex( )方法的代码:

public static function findMatchIndex(array:Array, element:Object):int {
// Use a variable to determine the index

// from which to start. Use a default value of 0.
var startingIndex:int = 0;
// By default don't allow a partial match.
var partialMatch:Boolean = false;
// If the third parameter is a number,
// assign it to nStartingIndex.
// Otherwise, if the fourth parameter is a number,
// assign it to nStartingIndex instead.
if(typeof arguments[2] == "number") {
startingIndex = arguments[2];
}
else if(typeof arguments[3] == "number") {
startingIndex = arguments[3];
}
// If the third parameter is a Boolean value,
// assign it to partialMatch.
if(typeof arguments[2] == "boolean") {
partialMatch = arguments[2];
}
// Assume no match is found.
var match:Boolean = false;
// Loop through each of the elements of the array
// starting at the specified starting index.
for(var i:int = startingIndex;
i < array.length; i++) {
// Check to see if the element either matches
// or partially matches.
if(partialMatch) {
match = (array[i].indexOf(element) != -1);
}
else {

match = (array[i] == element);
}
// If the element matches, return the index.
if(match) {
return i;
}
}
// The following return statement is only reached
// if no match was found. In that case, return -1.
return -1;
}
public static function findMatchIndices(array:Array,
element:Object, partialMatch:Boolean = false):Array {
var indices:Array = new Array( );
var index:int = findMatchIndex(array,
element,
partialMatch);
while(index != -1) {
indices.push(index);
index = findMatchIndex(array,
element,
partialMatch,
index + 1);
}
return indices;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值