【发布时间】:2021-01-19 06:20:46
【问题描述】:
在 J 中找到数组的最小元素是微不足道的:
<./ 5 6 4 9
4
但是如何使用J找到最小元素的index呢?
(如果这是一个XY问题,我应该说我想要索引而不是值,以便我可以在其他数组中查找相应的元素。)
【问题讨论】:
-
这个任务有special combinations;查看“排序和排序”:
x ({ /:) y、(i. >./) y。
标签: j
在 J 中找到数组的最小元素是微不足道的:
<./ 5 6 4 9
4
但是如何使用J找到最小元素的index呢?
(如果这是一个XY问题,我应该说我想要索引而不是值,以便我可以在其他数组中查找相应的元素。)
【问题讨论】:
x ({ /:) y、(i. >./) y 。
标签: j
我想我会用这个
ind=: I. @: (= <./)
它以<./ 开头,它返回你的最低值,它使用= 作为单子钩子的另一半。 Monadic 钩子接受 y 参数并将最右边的动词应用于它,然后左边的动词使用它作为它的右边参数,原始的 y 作为它的左边参数。所以,(= <./) 5 6 4 9 与 5 6 4 9 = 4 相同,这将返回 0 0 1 0。从那里可以很简单地使用一元 I.(索引)返回值 1 的索引,当然是 2。
如果有多个最小值,这也将返回多个索引。
ind 5 6 4 9 4
2 4
如果您只想要第一个或最后一个值,您可以使用包含i.(索引)或i:(最后一个索引)的更简单的单子钩子:
indfirst =: i. <./
indfirst 5 6 4 9 4
2
indlast =: i: <./
indlast 5 6 4 9 4
4
【讨论】:
= <./的结果可以直接用作索引:9 4 2 1 (#~ (= <./)) 5 6 4 4.