簡體   English   中英

使用linq比較兩個列表中參數內的最大值

[英]Compare two lists for Max value within a parameter using linq

我有一個Field對象列表,其參數為(string)Name和(int)Size。

我還有一個File對象的列表,每個對象包含一個Field對象的列表,其中一些可能出現在總體Field對象中。

我需要遍歷所有Field對象,並找到所有可能的File-Field對象的最大值。

我可以用嵌套3做到這一點嗎? for循環,但是我想看看linq是否可行。

List<fieldobject> mainfields;
List<fileobject> files;

在fileobject類中:

List<fieldobject> fields;

for循環的基本概念是:

foreach (fieldobject field in mainfields)
    foreach (fileobject file in files)
        foreach (fieldobject fileField in file.fields)
            if (field.name == fileField.name)
                field.size = math.max(field.size,fileField.size);

我可以用linq替換if和賦值,但是我希望擺脫大多數/所有的for循環。 任何幫助是極大的贊賞。

如果我正確理解file.fields是fileobject對象內部的fileobject內部列表,那么您需要使用SelectMany擴展方法:

foreach (fileobject field in mainfields)
{
    field.size = files.SelectMany(x => x.fields)
   .Where(y => y.name == field.name).Select(m => m.size).Max();
}

你可能有類似的東西;

foreach (fieldobject field in mainfields)
{
    int maxFileSize = files.Where(f => f.name == field.name)
                           .Select(f => f.size)
                           .Max();
    if (field.size < maxFileSize)
    {
         field.size = maxFileSize;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM