这是一个相当基本的问题,但几乎没有AppleScript经验。我有一个数组,我想在显示对话框中列出,所以最终输出如下:
Frame Count: 29
Frame Offsets:
12.684
15.909
28.841
46.332
etc.
不幸的是我找不到任何循环遍历这样的数字列表的例子,而没有先将它们全部转换为字符串,所以此刻我就像这样单独调用每个数字:
display dialog "Frame Count: " & FrameCount & return & return & "Frame Offsets: " & return & ((item 1 of DataList) / 1000) & return & ((item 2 of DataList) / 1000) & return & ((item 3 of DataList) / 1000)
这是非常不优雅的(除非事先知道帧数,否则具有挑战性)。有没有办法做到这一点,而无需将这些数字转换为字符串?任何帮助非常感谢: - )
答案 0 :(得分:2)
如果您考虑到特定格式且操作系统默认值不够好,则无法解决此问题。您必须将列表转换为您需要的特定格式的字符串,并在对话框中显示。
答案 1 :(得分:2)
您必须将数字转换为字符串,但您可以使用循环代替。以下代码适用于instanace:
set FrameCount to 29
set DataList to {12684, 15909, 28841, 46332}
set OffsetString to "Frame Offsets:" & return
repeat with off in DataList
set OffsetString to OffsetString & (off / 1000) & return
end repeat
display dialog "Frame Count: " & FrameCount & return & return & OffsetString
在这里,您使用每个帧偏移量循环DataList
,然后继续追加到OffsetString
。请注意,我没有做任何额外的字符串格式化;据我所知,这对AppleScript来说很难。 (例如,12680
会变成"12.68"
而不是"12.680"
,这可能是您想要的也可能不是。)它并不华丽,但它与您所获得的一样优雅AppleScript的。
repeat
循环具有多种功能;它是AppleScript唯一的循环结构,但它支持while循环,for循环,foreach循环和其他一些东西。
repeat while <cond> ... end repeat
和repeat until <cond> ... end repeat
重复运行他们的身体,直到<cond>
分别为真或假。repeat with <var> from <start> to <end> [by <step>] ... end repeat
通过将<var>
递增<step>
来反复运行正文,直到它大于<end>
(将by <step>
的默认值保留为by 1
) repeat <n> times ... end repeat
运行正文<n>
次。repeat with <var> in <list> ... end repeat
重复运行身体,<var>
等于<list>
的每个连续元素repeat ... end repeat
是一个无限循环(您可以使用exit repeat
保留它或其中任何一个)答案 2 :(得分:1)
您可以使用AppleScript标准命令choose from list代替display dialog
。此命令本机处理数字列表:
set theList to {12.684, 15.909, 28.841, 46.332}
choose from list theList with title "Frame Count: " & (length of theList) with prompt "Frame Offsets:"