c#如何使用相同的正则表达式结果填充变量?

时间:2018-08-15 21:09:24

标签: c#

我很难从给定的数据集中选择一些数据。假设我确实有没有指定类型的汽车列表。因此,我需要通过名称以及我知道类型的名称来选择它们。

var ItemList = Entries?.Where(entry => (entry?.Type?.IsCar() ?? false))
    ?.OrderBy(entry => entry?.Name?.RegexMatchSuccessIgnoreCase(@"ferrari|lamborghini|mclaren"))        //sports cars
    ?.OrderBy(entry => entry?.Name?.RegexMatchSuccessIgnoreCase(@"bmw|audi|mercedes"))                  // personal cars
    ?.OrderBy(entry => entry?.Name?.RegexMatchSuccessIgnoreCase(@"man|iveco"))                          //trucks
    ?.ThenBy(entry => entry?.Weight ?? int.MaxValue)
    ?.ToArray();

这将为我提供所有汽车的清单,并按名称和重量排序,这还可以,但不完全。 我正在寻找的是能够按每种类型填充ItemList,并且如果该类型没有汽车,则用另一种类型填充。因此,首先ItemList必须只包含跑车,如果没有,则尝试找出私人汽车,如果没有,则尝试找出卡车。

例如像

var ItemList = Entries?.Select(entry =>
    entry?.Name?.RegexMatchSuccessIgnoreCase(@"ferrari|lamborghini|mclaren") ??       //sports cars
    entry?.Name?.RegexMatchSuccessIgnoreCase(@"bmw|audi|mercedes") ??        // personal cars
    entry?.Name?.RegexMatchSuccessIgnoreCase(@"man|iveco")                 //trucks
    ).DefaultIfEmpty(false);

但是这给了我对/错,因为第一个返回可以使用的条目,有人可以让我的大脑怎么按类型选择它们,并且可以将它们用作条目吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我将尝试通过条件运算符回答您的问题:如何“能够按每种类型填充ItemList,如果该类型没有汽车,请使用另一种类型填充汽车”。由于您没有提供注释中指出的 MCVE ,因此我将使用一个简单的字符串列表作为示例(您应该能够通过简单的替换将其绘制到示例的上下文中,即而不是检查每个值,而是检查每个Regex匹配项)

var entries = new List<string>(){"a", "a", "b"};

var itemList = entries.Any(e => e == "a") ? entries.Where(e => e == "a") 
                      : entries.Any(e => e == "b")  
                      ? entries.Where(e => e == "b") // continue for all your types
                      : null;

这个想法很简单,就是检查列表中是否包含与您特定类型的任何匹配项,如果是,则返回该类型的所有元素并短路,否则检查下一个类型,依此类推。您可能可以这样做更有效,这只是为您的问题提供可能的解决方案