我有什么:
string[] array = new string[] { "Hello", "Please", "Help", "Me", "Thanks" };
现在我希望过滤此数组以找到两个长度一起等于6的字符串:
{ "Help", "Me" }
。
感谢。
抱歉我的英语不好。
答案 0 :(得分:1)
可以在单个LINQ查询中完成......
array = array.Where(o => 6 - o.Length >= 0 && array.Any(n => n.Length == 6 - o.Length)).ToArray();
答案 1 :(得分:0)
您可以按字符串的长度对array
进行排序,然后从第一个字符串(min = 0
)和最后一个字符串max = array.Length - 1
开始搜索。
如果长度之和小于6,则提前min
索引。
如果长度之和大于6,则减少max
索引。
如果长度的总和等于6,那么你就有了单词。
如果min
索引达到max
索引,那么就没有单词。
public string[] Words(string[] array)
{
var sorted = array.OrderBy(s => s.Length).ToArray();
int min = 0;
int max = sorted.Length - 1;
while (min < max)
{
int length = sorted[min].Length + sorted[max].Length;
if (length < 6) min++;
else if (length > 6) max--;
else return new string[] { sorted[min], sorted[max] };
}
return null;
}