在 C# 中获取列表<元组<双精度、双精度>> _val中的最大值或最小值



Hi2,

如何从List<Tuple<double, double>> tupleList中获取最小值和最大值?

我知道我可以通过在List<double> onlyList中获得min或min

onlyList.Max();
onlyList.Min();

但是List with Tuple怎么样?我应该将元组解析为一个新列表,然后调用";最大((/最小((">

例如,如果我有这个

tupleList.Add(new Tuple<double, double>(11, 3));
tupleList.Add(new Tuple<double, double>(10, 5));
tupleList.Add(new Tuple<double, double>(12, 2));
tupleList.Add(new Tuple<double, double>(13, 0));
tupleList.Add(new Tuple<double, double>(15, 4));
tupleList.Add(new Tuple<double, double>(14, 1));

我想比较每个元组中的第一个双精度(从10到15(,得到10和15作为min和max,然后比较每个元组(从0到5(中的第二个双精度,得到0和5分别作为min和max。

谢谢你们的真知灼见!^^,

如果您想要元组列表中任何值的最小值/最大值,您可以执行:

onlyList.Min(t => t.Item1 < t.Item2 ? t.Item1 : t.Item2);
onlyList.Max(t => t.Item1 > t.Item2 ? t.Item1 : t.Item2);

如果您需要第一个或第二个项目的最大值,请使用

onlyList.Max(t => t.Item1);

对于CCD_ 3也是类似的。

还有其他方法-创建一个";扁平的";列出所有项目(例如使用SelectMany(并调用max等。使用对您最有意义的内容。除非您对列表进行多次迭代,否则我不会期望有显著的性能差异。

public (double, double) Min(IEnumerable<(double, double)> items)
{
(double, double) result = (int.MaxValue, int.MaxValue);
foreach(var item in items)
{
result.Item1 = Math.Min(result.Item1, item.Item1);
result.Item2 = Math.Min(result.Item2, item.Item2);
}
return result;
}

public (double, double) Max(IEnumerable<(double, double)> items)
{
(double, double) result = (int.MinValue, int.MinValue);
foreach(var item in items)
{
result.Item1 = Math.Max(result.Item1, item.Item1);
result.Item2 = Math.Max(result.Item2, item.Item2);
}
return result;
}

var tupleList = new List<(double, double)> {
(11,3),
(10,5),
(12,2),
(13,0),
(15,4),
(14,1)
};
var minResult = Min(tupleList);
var maxReslut = Max(tupleList);

或者:

var tupleList = new List<(double, double)> {
(11,3),
(10,5),
(12,2),
(13,0),
(15,4),
(14,1)
};
var minResult = (tupleList.Min(i => i.Item1), tupeList.Min(i => i.Item2));
var maxResult = (tupleList.Max(i => i.Item1), tupeList.Max(i => i.Item2));

上面的代码要少得多,但它是通过列表的四个单独的过程,而不是只有两个。

相关内容

  • 没有找到相关文章

最新更新