Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 从double数组列表中获取double数组,其中数组中的第一个值是使用linq的最大第一个值_Vb.net_Linq_Lambda - Fatal编程技术网

Vb.net 从double数组列表中获取double数组,其中数组中的第一个值是使用linq的最大第一个值

Vb.net 从double数组列表中获取double数组,其中数组中的第一个值是使用linq的最大第一个值,vb.net,linq,lambda,Vb.net,Linq,Lambda,我想从一个double数组的列表中获取double数组,其中数组的第一个值是与列表中其他数组的第一个值相比的最高值 例如,如果数组列表是(4,5),(-3,2),(7,1),那么它将返回(7,1) 我试过了,但没有成功: Dim vertices as List(of Double()) = MethodToGetList() dim rv as Double() = vertices.Select(Function(x As Double()) x.First.MaxValue).ToArr

我想从一个double数组的列表中获取double数组,其中数组的第一个值是与列表中其他数组的第一个值相比的最高值

例如,如果数组列表是(4,5),(-3,2),(7,1),那么它将返回(7,1)

我试过了,但没有成功:

Dim vertices as List(of Double()) = MethodToGetList()

dim rv as Double() = vertices.Select(Function(x As Double()) x.First.MaxValue).ToArray

对不起,我的基本功有点生疏了,我用C#写,希望你能理解要点

每当您想要一个LINQ函数时,如果您需要对序列中的每一项都检查一次,并且您想要对当前正在检查的项执行某些操作,请考虑
Aggregate

这将使用第一个源元素初始化变量highestValue;然后将每个源元素与最高值进行比较,并保留最高值:

List<List<double>> mySource = ...
var result = mySource.Aggregate( (highestValue, nextValue) =>
    (nextValue[0] > highestValue[0]) ? nextValue : highestValue);
现在在LINQ中:使用其他聚合:

var result = mySource.Aggregate(emptyResult, // use this as seeder
    (nextValue[0] > highestValue[0]) ? nextValue : highestValue);
如果您有一个空序列,这将有所帮助。Buf如果源中的一个列表为null或空怎么办

让我们假设你根本不想考虑它们:

var nonEmptyArrays = mySource.Where(list => list != null && list.Count != 0)
var result = noneEmptyArrays.Aggregate((emptyResult, // use this as seeder
    (nextValue[0] > highestValue[0]) ? nextValue : highestValue);

简单的问候

试试这个。这将按每个数组的第一个位置,然后按数组的第二个位置,对数组的
顶点
列表进行排序。然后,对于相同的数据(如下所示),列表将如下所示:
(7,1)、(7,2),…
。然后语句的最后一段获取排序列表中的第一个元素,以便返回
(7,1)

要测试的数据:

Dim vertices As List(Of Double()) = New List(Of Double())

vertices.Add(New Double() {4, 5})
vertices.Add(New Double() {-1, 2})
vertices.Add(New Double() {7, 1})
vertices.Add(New Double() {7, 2})

如果打领带,你怎么办?说出同样的清单并添加
(7,2)
好问题。以秒值较低的一个为例。接受你的答案是因为它在VB.NET中(我对VB中的linq感到困惑),因为它是一个聪明优雅的解决方案。@EdwardBagby很高兴你能用它。我不使用VB.NET编写代码,但它与C#非常相似。希望这有帮助!这不是很有效:如果你有数千个顶点,并且你在排序时发现了最大的顶点,为什么要排序第二个、第三个等等:很多项目都会被白白比较。看见
var nonEmptyArrays = mySource.Where(list => list != null && list.Count != 0)
var result = noneEmptyArrays.Aggregate((emptyResult, // use this as seeder
    (nextValue[0] > highestValue[0]) ? nextValue : highestValue);
Dim rv As Double() = vertices.OrderByDescending(Function(v) v(0)).ThenBy(Function(v) v(1)).FirstOrDefault
Dim vertices As List(Of Double()) = New List(Of Double())

vertices.Add(New Double() {4, 5})
vertices.Add(New Double() {-1, 2})
vertices.Add(New Double() {7, 1})
vertices.Add(New Double() {7, 2})