Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
C# 使用LINQ(函数式编程)将一个列表缩减为两个较小的列表_C#_Linq_Functional Programming - Fatal编程技术网

C# 使用LINQ(函数式编程)将一个列表缩减为两个较小的列表

C# 使用LINQ(函数式编程)将一个列表缩减为两个较小的列表,c#,linq,functional-programming,C#,Linq,Functional Programming,嘿,伙计们,我正试着去了解LINQ和FP,所以请原谅我的天真。我正在尝试使用LINQ进行一些字符串解析,并将其映射到一个函数上,因此我需要将我的字符串拆分为更小的字符串 我想把数组分成两个较小的列表。我可以使用reduce(.Aggregate())来执行此操作吗?我试图找出如何应用reduce返回一个列表,但我没有任何运气 我想要的是: myString.ToCharArray().Take(2) 映射到每一个元素。我无法在头脑中思考如何减少列表,而不将take应用到每一个元素,而不是每一个

嘿,伙计们,我正试着去了解LINQ和FP,所以请原谅我的天真。我正在尝试使用LINQ进行一些字符串解析,并将其映射到一个函数上,因此我需要将我的字符串拆分为更小的字符串

我想把数组分成两个较小的列表。我可以使用reduce(.Aggregate())来执行此操作吗?我试图找出如何应用reduce返回一个列表,但我没有任何运气

我想要的是:

myString.ToCharArray().Take(2)
映射到每一个元素。我无法在头脑中思考如何减少列表,而不将take应用到每一个元素,而不是每一个元素

具体例子

给定(1,2,3,4,5,6)

我想要((1,2)、(3,4)、(5,6))

澄清:

给定“abcdef”

我要“ab”,“cd”,“ef”

为你们的帮助干杯

Enumerable.Range(0, myString.Length)
      .GroupBy(index => index / 2, index => myString[index])
      .Select(eachGroup => new string(eachGroup.ToArray()));
请注意,上面的示例依赖于您对集合具有基于索引的访问权限这一事实。要使其在每个
IEnumerable
上工作而不受此限制,请执行以下操作:

collection.Select((e,i) => new { Index = i, Element = e })
      .GroupBy(x => x.Index / 2, x => x.Element);

这似乎不是你想要的方法,但我看到的是:

Enumerable.Range(0, myString.Length - 1)
    .Where(i => i % 2 == 0)
    .Select(i => myString.Substring(i, 2).ToCharArray());
注意:我认为如果你有奇数个字符,子字符串可能会崩溃;可能必须添加一个检查并使用类似(myString.Length%2==0?2:1)的内容,但我还没有测试


第二点注意:对我来说,这里的困难在于Reduce实际上取决于数组索引而不是值;因此,我的解决方案是枚举数组索引并从那里开始工作。另一种解决方案是提供一种方法(我想不出内置的方法),该方法使用包含索引和字符的元组枚举字符串中的字符。

如果可以,我试图避免将其放入列表中。我的想法是,如果我可以得到一个2的枚举数,那么我就可以将(.Select())转换映射到它上面来创建结果。看起来是个不错的开始。简单易懂,简短易懂!该死我应该开始更多地使用LINQ@SirDemon这就是我使用LINQ的原因。“在列表上使用函数编程真是太优雅了。”Mehrdad。您是否可以更新您的答案,而不使用。选择。我现在意识到groupBy正返回我想要的东西。然后,我可以在那里使用eachgroup=>myfunction(eachgroup)执行一个.Select操作。如果你更新了,我会把它标记为正确的。@Mehrdad回答后有一点可爱的信息,非常优雅。非常感谢你的意见:)我喜欢。侧面的创建数组索引列表,然后使用数组从该列表创建映射子字符串函数。问题是,如果您可以将其转换为函数take格式,那么您不需要每次都将列表解析为子字符串,您只需获取2个元素,然后映射即可。