2

在我的数组中查找最小元素时,如何指定自定义代码进行比较?

例如,我有两个数组:

int[] a = new int[] {3, 6, 8};
int[] b = new int[] {9, -2, 5};

我想弄清楚,具有相应索引的元素的最小比率是多少(即找到 和 的最小值) 3/96/(-2)然后8/5返回索引。我已经知道 Array.Min(),但我想知道是否可以对其进行任何形式的自定义。

4

5 回答 5

3

也许是这样的:

double smallest = double.MaxValue;
int smallestIndex = 0;

for (int i = 0; i < (a.Length > b.Length ? b.Length : a.Length); i++)
{
    if ((double)a[i] / b[i] < smallest)
    {
        smallest = (double)a[i] / b[i];
        smallestIndex = i;
    }
}

minimumIndex 将包含最后的最小比率的索引。

于 2009-11-27T10:24:41.187 回答
3

使用 linq 获取最小值和索引,您可以查看以下答案:

如何使用 LINQ 选择具有最小或最大属性值的对象

使用 Jon Skeet 扩展方法,您可以编写

var result = Enumerable.Range(0,a.Length)
     .Select(i => new {Value = a[i]/b[i], Index = i})
     .MinBy(r => r.Value);

(你必须注意 b 中的 0)

于 2009-11-27T10:29:07.853 回答
2

您可以使用 linq 将两个序列“压缩”在一起,按比例对它们进行排序并选择第一个索引:

a.Select((item, index) => {new { A = item, B = b[index], Idx = index })
    .OrderBy(i => (double)i.A / i.B)
    .Select(i => i.Idx)
    .First();
于 2009-11-27T10:44:43.917 回答
0

不要忘记SortedList 类

于 2009-11-27T13:25:14.053 回答
0

使用 linq 你可以这样做:

            int customMin = a.Select((v, i) => new { a = v, b = b[i] })
                .Select(x => x.a / x.b)
                .Min();

第一个选择将两个列表合并为 on,第二个选择计算您的自定义 mertic,然后我们调用 min 来获得最小值。

于 2009-11-27T10:26:38.257 回答