获得排序后的下标与原始下标关系

本文介绍了一个从原始索引映射到排序后索引的方法,并提供了Java实现。该方法通过比较函数来确定排序依据,实现了从原始列表到排序后列表索引的映射。同时探讨了从Java转到JS进行开发的心得。

java写着写着,吐了,后来想用 js 写,虽然比java还要贫瘠,但至少可以随性些。 

 java 版在 http://www.cnblogs.com/ly45/p/6221091.html 里,方法名是:sortIndexes。

    /// <summary>
    /// Map orignal indexes to sorted indexes, eg: SI2I([2,5,9,4,6,7])=[0(0,2),3(1,4),1(2,5),4(3,6),5(4,7),2(5,9)].
    /// </summary>
    /// <returns></returns>
    public static int[] SI2I<T>(this List<T> s, Func<T, int> by) {
        var r = new List<int>();
        var t = new List<T>(s);
        while (r.Count < s.Count) {
            var f = 0;
            var v = by(t[0]);
            for (var i = 1; i < t.Count; i++) {
                var n = by(t[i]);
                if (n < v) {
                    f = i;
                    v = n;
                }
            }
            var ts = t[f];
            var ii = s.IndexOf(ts);
            while (r.Contains(ii)) {
                ii = s.IndexOf(ts, ii + 1);
            }
            r.Add(ii);
            t.RemoveAt(f);
        }
        return r.ToArray();
    }


    /// <summary>
    /// Map sorted indexes to orignal indexes, see <see cref="SI2I{T}(List{T}, Func{T, int})"/>.
    /// </summary>
    public static int[] I2SI<T>(this List<T> s, Func<T, int> by) {
        return SI2I(SI2I(s, by).ToList(), i => i);
    }
}

转载于:https://www.cnblogs.com/ly45/p/6158154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值