我有一个字符串列表,每个字符串都是可变长度的。我想从列表中投影一个子集,该子集的字符串从原始列表连接起来,长度等于 5。我正在使用聚合函数,但它没有给我想要的结果。对于这个投影,什么是合适的 LINQ 查询?你能帮忙吗?
代码:
class Program
{
static void Main(string[] args)
{
IEnumerable<string> items = new List<string> {"abc", "ab", "abcd", "abcde", "abcdef", "a", "ab", "cde"};
//All combinations of concatenations equal to length 5.
//Only need to process an item once and need to concatenate 2 items and no more
var filteredList = items.Where(x => x.Length < 5)
.Aggregate(Execute).ToList();
foreach (var f in filteredList)
{
//Should out put : abc+ab = abcab
//Should out put : abcde
//Should out put : abcd+a = abcda
//Should out put : ab+cde = abcde
Console.WriteLine(f);
}
}
private static string Execute(string a, string b)
{
if (string.IsNullOrEmpty(a) || string.IsNullOrEmpty(b))
return null;
if ((a.Length + b.Length) == 5)
return a + b;
return null;
}
}
几点:
处理完一个项目后,我不需要再次考虑该项目进行组合
以上是正确的,直到我在列表中再次找到相同的项目,一旦我找到它,我应该尝试将它与另一个未在先前连接中使用的项目连接。
不需要它是 LINQ,我只是在寻找解决方案。
输出不能包含两个以上的字符串?(a + bc + de) 不是必需的。
项目不需要与自身连接。
我已经提到输出作为问题的一部分。
注意:使用 .NET 3.5(但如果可能的话,也希望看到 .NET 4.0 中的快捷方式)