配列arrayに対して変数inputの値に最も近いk個のarrayの要素のインデックスを取得したい


配列arrayに対して変数inputの値に最も近いk個のarrayの要素を取得できるメソッドが作りたいですが，方法がわかりません．  
質問タイトルだけではよくわからないと思うので，以下の例を提示します．

配列`array`を以下と仮に定義する

[code]

    array = [1.3, 1.4, 6.3, 2.9, 3.0]
    
[/code]

ここで，`input`を以下と仮に定義する

[code]

    input = 3.5
    
[/code]

このとき，`k = 3`とすると`array`の要素で`input`に最も近い値3つは，

[code]

    1.4, 2.9, 3.0
    
[/code]

なので，返り値として，`[1, 3, 4]`をとる．  
このようなメソッドを作りたいですが，わかりません．  
どなたかご教授よろしくお願いいたします．




要素の値を取るならこれで

[code]

        array = [1.3, 1.4, 6.3, 2.9, 3.0]
        input = 3.5
        k = 3
        p array.min_by(k) { |x, _| (input - x).abs }
        # [3.0, 2.9, 1.4]
    
[/code]

インデックスであれば

[code]

        array = [1.3, 1.4, 6.3, 2.9, 3.0]
        input = 3.5
        k = 3
        p array.each_with_index.min_by(k) { |x, _| (input - x).abs }.map(&:last)
        # [4, 3, 1]
    
[/code]

でどうでしょう




要素の値を取るならこれで

[code]

        array = [1.3, 1.4, 6.3, 2.9, 3.0]
        input = 3.5
        k = 3
        p array.min_by(k) { |x, _| (input - x).abs }
        # [3.0, 2.9, 1.4]
    
[/code]

インデックスであれば

[code]

        array = [1.3, 1.4, 6.3, 2.9, 3.0]
        input = 3.5
        k = 3
        p array.each_with_index.min_by(k) { |x, _| (input - x).abs }.map(&:last)
        # [4, 3, 1]
    
[/code]

でどうでしょう

