使用 J 的最小元素索引

Index of minimum element using J

在 J 中,找到数组的最小元素很简单:

   <./ 5 6 4 9
4

但是如何用J求最小元素的index呢?

(如果这是一个XY问题,我应该说我想要索引而不是值,这样我就可以在其他数组中查找相应的元素。)

我想我会用这个

ind=: I. @: (= <./) 

它以 <./ 开始,return 是您的最低值,它使用 = 作为 monadic 钩子的另一半。 Monadic 钩子接受 y 参数并将最右边的动词应用于它,然后左边的动词使用它作为它的右边参数,原始的 y 作为它的左边参数。因此,(= <./) 5 6 4 95 6 4 9 = 4 和此 return 相同 0 0 1 0。从那里可以很简单地使用 monadic I.(索引)到 return 值 1 的索引,当然是 2.

如果最小值不止一个,这也会 return 多个索引。

   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

另一种选择是采用对列表进行排序的排列的第一个元素:{.@/:。这具有不仅适用于列表而且适用于任意数组的优点,并为您提供字典顺序最少的项目的索引。