如果有人可以告诉我我在这里做错了什么,或者指出正确的方向来找到答案,我将不胜感激。
我有一个数字列表和一个对应名称列表
numList {"1", "2", "4", "6"}
nameList {"bob", "joel", "mickey", "tara", "jason", "stacey"}
我正在尝试使一个处理程序从numList中获取数字并获取相应的名称作为列表。
The result should be {"bob", "joel", "tara", "stacey"
这是我所拥有的,但是没有返回正确的名称。
on myFirstHandler(this_list, other_list)
set rest_list to {}
set availlist to {}
repeat with h from 1 to the number of this_list
set the rest_list to item h of other_list
set the end of the availlist to rest_list
end repeat
return availlist
end myFirstHandler
set numList {"1", "2", "4", "6"}
set nameList {"bob", "joel", "mickey", "tara", "jason", "stacey"}
myFirstHandler(numList, nameList)
set AlcoholAvailable to the result
returns {"bob", "joel", "mickey", "tara"}
答案 0 :(得分:0)
您的尝试非常非常接近。这是它的修改后的更正版本:
on myFirstHandler(this_list, other_list)
set rest_list to {}
repeat with h in this_list
set the end of rest_list to item h of other_list
end repeat
return rest_list
end myFirstHandler
set numList to {1, 2, 4, 6}
set nameList to {"bob", "joel", "mickey", "tara", "jason", "stacey"}
myFirstHandler(numList, nameList)
set AlcoholAvailable to the result
主要的不同之处在于repeat
循环的定义方式:在您的原始尝试中,您循环浏览了源列表的 indices ,因此,您将始终使用运行1, 2, 3, 4, 5, 6
的数字,并因此从目标列表中提取这些项目。在修改后的版本中,我正在遍历 值 ,因此可以使用源列表1, 2, 4, 6
中的数字。>
因此比较您的repeat
子句:
repeat with h from 1 to the number of this_list
与我的
repeat with h in this_list
两者都是AppleScript的完全有效位,但做的事情略有不同:一个使用索引,另一个使用值。
稍微先进一点,但用途更多的方法就是这样:
set numList to {1, 2, 4, 6}
set nameList to {"bob", "joel", "mickey", "tara", "jason", "stacey"}
on map(L, function)
local L, function
tell result to repeat with x in L
set x's contents to function's fn(x)
end repeat
L
end map
on itemInList(L)
script
on fn(x)
item x of L
end fn
end script
end itemInList
map(numList, itemInList(nameList))
在这里,我定义了一个“基本” 映射功能。 mapping
函数采用一个函数(在这种情况下,该函数从目标列表返回一个元素),并将该函数应用于数组中的每个元素(在这种情况下,您的源列表为numList
)。此列表在此过程中被修改,因此您会发现numList
的元素已替换为{"bob", "joel", "tara", "stacey"}
。
此构造的特殊之处在于,您可以替换map
在此示例itemInList()
中使用的函数(处理程序),并定义具有类似性质的其他处理程序,这些处理程序会对列表执行其他操作。