我正在为XML文件的一部分编写灵活的搜索算法。我有完全相同的方法在其他地方完美地运作,这就是为什么这会让我感到沮丧。
以下是我的功能部分,我遇到了麻烦。
var searchResults:Array = [];
var r:Array = [];
//Other code...
var classSplit:Array = inClass.split("-");
var profs:Array = getCourseProfs(classSplit[0], classSplit[1]);
trace(searchResults + "-vs-" + profs);
for each(var si:String in searchResults)
{
trace(si + " is at index " + profs.indexOf(si));
trace(profs);
if(r.indexOf(si) == -1 && profs.indexOf(si) != -1)
{
r.push(si);
trace(r);
}
}
这是特定运行的跟踪语句的输出(来自上面的代码)。
GABIOMA1,GABIOMA1-vs-GABIOMA1,MITCHKA1,GIBSOCA1
GABIOMA1 is at index -1
GABIOMA1,MITCHKA1,GIBSOCA1
GABIOMA1 is at index -1
GABIOMA1,MITCHKA1,GIBSOCA1
Final:
如您所见,该函数在searchResults数组(字符串)中有两个结果。它们两者完全相同,因为我还没有整理出重复的搜索结果。 " GABIOMA1,GABIOMA1"
然后,我将其与数组" profs"进行比较。这三个值:" GABIOMA1,MITCHKA1,GIBSOCA1"
您可以在教授的索引0中看到匹配结果。但是,正如您从下一行所看到的那样,profs.indexOf(si)' when
si`是" GABIOMA1"错误地返回" -1"。
我可以在心跳中写一个解决方法,但我需要知道为什么indexOf已决定bork。
编辑:更加充实,IF语句的另一个分支中的代码就像一个魅力......
for each(var s:String in searchResults)
{
if(r.indexOf(s) == -1)
{
r.push(s);
}
}
编辑2:这是我的工作解决方法。如您所见,所有阵列都正常工作。
for each(var si:String in searchResults)
{
var match:Boolean = false;
for each(var pi:String in profs)
{
if(si == pi)
{
pr.push(si);
break;
}
}
}
答案 0 :(得分:0)
鉴于您的trace(profs)
返回单个字符串,您的数组包含一个字符串GABIOMA1,MITCHKA1,GIBSOCA1
作为单个实体,这就是您的GABIOMA1
索引返回-1的原因。您需要在getCourseProfs()
中使用逗号分割,以将GABIOMA1
作为单独的字符串。
更新:我已经测试了以下内容:
var t:Array = ['GABIOMA1', 'MISCHKA1', 'GIBSOCA1'];
trace(t);
trace(t.indexOf('GABIOMA1'));
var a:Array = ['MITCHKA1', 'GABIOMA1\x00'];
for each(var si:String in a) trace(si, 'is at index', t.indexOf(si));
这给了我a
的任一元素的预期结果-1,以及您的示例中预期的跟踪结果,但是,相等测试失败。请在检查searchResults
之前尝试修剪indexOf()
字符串。
旁注:将\x00
作为字符串的第一个字符放置会产生不同的跟踪结果! trace(si, 'is at index', t.indexOf(si));
导致显示空字符串代替si
,如下所示:is at index -1
,而trace(si + ' is at index ' + t.indexOf(si));
会显示完整字符串:GABIOMA1 is at index -1
。因此,仔细检查字符串是否有不可打印的符号,可能有一些隐藏的零字符,用于复制indexOf()
。