gpt4 book ai didi

c# - 使用 LINQ 过滤字符串

转载 作者:行者123 更新时间:2023-11-30 21:27:42 32 4
gpt4 key购买 nike

我在编码面试中遇到了这个问题,我需要过滤字符串列表并返回一个字符串以“L”开头的排序枚举,但它写的是如果字符串列表在调用后被修改,我的解决方案应该有效不使用 toList() 的 Filter 方法,我不明白最后一个条件。

目前我可以找到以“L”开头的已排序字符串。

/**C# method**/        
public static IEnumerable<string> Filter(List<string> strings)
{
return strings.Where(i => i.StartsWith("L") || i.StartsWith("l")).OrderBy(x => x);
}

我需要理解最后一句的意思:如果在不使用 ToList() 的情况下调用 Filter 方法后修改了字符串列表,则您的解决方案应该有效。

最佳答案

如果您了解 Linq 在幕后的工作原理,很可能会看到他们在这里的目的。

IEnumerable 接口(interface)不仅允许循环某些内容,还可以用于延迟执行。这意味着实际代码不会在枚举它之前执行(例如循环或 .ToList() 调用)。

那么这与您的问题有什么关系?好吧,因为它在循环之前没有执行,我们实际上可以用列表调用 Filter() 方法并保留对可枚举的引用,然后在我们实际循环之前更改源列表可枚举。

using System;
using System.Collections.Generic;
using System.Linq;

class MainClass {
public static void Main (string[] args) {
var list = new List<string> { "Lambda", "Aardvark", "Lexicon" };

// This is now just an IEnumerable that will
// call Where() and OrderBy() when it is enumerated.
var filteredEnum = Filter(list);

list.RemoveAt(1);
list.Add("Leisure");

// This is where the actual enumeration happens
// which then executes the Linq methods.
foreach(var word in filteredEnum)
Console.WriteLine(word);

}

public static IEnumerable<string> Filter(List<string> strings)
{
return strings.Where(i => i.StartsWith("L") || i.StartsWith("l")).OrderBy(x => x);
}
}

试试https://repl.it/repls/CautiousFrankLaw .

因此,在您的下一次面试之前,您可能想多看看 deferred execution and linq这样你下次就可以拿下这个了。

关于c# - 使用 LINQ 过滤字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336280/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com