我是ActionScript 3的绝对新手,我需要创建一个函数,搜索字母数组以查找特定字母并返回其索引。我已经找到了indexOf
这是完美的。但我需要这个搜索不区分大小写。就像我的数组是这样的:
Array("a","B","c")
如果我正在寻找"A"
,则返回的索引将是0
。
这有预定义的功能吗?
答案 0 :(得分:2)
我认为没有预定义的功能。
但你可以写自己的。使用for循环并遍历数组,使用String.toLowerCase()
临时更改数组值和检查值以进行检查。
实际上......要求你自己编写,就是要求你用脚射击自己。创建一个类ArrayUtils
,将此函数填入其中。
/**
* Searches through an array for a case-insensitive string match.
* Attempts to imitate Array.indexOf where it can.
* @param arr The array to search through
* @param searchingFor The string to search for
* @param fromIndex Optional, an index to start searching at.
* @returns The index of the array that a match was found at (zero-indexed), or -1 if no match was found.
*/
public static function indexOfCaseInsensitiveString(arr:Array, searchingFor:String, fromIndex:uint = 0):int {
var lowercaseSearchString:String = searchingFor.toLowerCase();
var arrayLength:uint = arr.length;//Retrieving array length is expensive, optimization
for(var index:uint = fromIndex; index < arrayLength; index++){
var element:* = arr[index];
if(element is String && element.toLowerCase() == lowercaseSearchString){
return index;
}
}
return -1;//It wasn't found in the array.
}
然后您可以通过ArrayUtils.indexOfCaseInsensitiveString(<your array>, <your string>)
调用它。 fromIndex
只是模仿常规indexOf
(最少惊讶的原则;如果我说它是“indexOf
不区分大小写的字符串搜索”,为什么会影响{{1} }?)。
答案 1 :(得分:0)
不,没有。
最简单的方法:
function getCaseInsensitiveIndexOf(needle:String, haystack:Array):int
{
var index:int = -1;
if(needle != null)
{
index = haystack.indexOf(needle.toUpperCase());
if(index == -1)
index = haystack.indexOf(needle.toLowerCase());
}
return index;
}
//贝娄是我的第一个答案,但它有点矫枉过正
您必须事先规范化阵列的内容。 你可能想要实际标准化它的副本,所以你不要丢失任何细节。
function getNormalizedVersionOf(target:Array):Array
{
var copy:Array = [];
for(var i:int = 0; i < target.length; i++)
{
copy[i] = (target[i] as String).toUpperCase(); // or .toLowerCase()
}
return copy;
}
当您搜索时,搜索规范化副本
function getItemIndex(searchFor:String):int
{
var s:String = searchFor.toUpperCase();
return mNormalized.indexOf(s); //if you have the copy array as a class member called mNormalized
}
答案 2 :(得分:0)
Regular Expressions来使用不区分大小写的标记来实现此目的。
function findTargetIndex(needle:String,heystack:Array):int
{
var straw:String;
var magnet:RegExp = new RegExp(needle,"i");//"i" flag makes the search case insensitive.
//can also be done with magnet.ignoreCase = true;
for (var x:int = 0; x < heystack.length; x++)
{
straw = heystack[x];
if (straw.search(magnet) > -1) return x;
}
return -1;
}
上述函数将搜索数组,查找包含搜索字符串的任何元素。您只能通过更改RegExp;
将其限制为匹配整个字符串var magnet:RegExp = new RegExp("^"+needle+"$","i");
^
匹配字符串的开头,$
匹配结尾,这意味着整个字符串必须与整个表达式匹配。