Applescript处理程序,请重复i从1到this_list的编号

时间:2018-10-31 19:27:53

标签: applescript handler

如果有人可以告诉我我在这里做错了什么,或者指出正确的方向来找到答案,我将不胜感激。

我有一个数字列表和一个对应名称列表

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"}

1 个答案:

答案 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()中使用的函数(处理程序),并定义具有类似性质的其他处理程序,这些处理程序会对列表执行其他操作。