- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设您有两个 IEnumerbale
对象。我们如何合并它们(在某些条件下,例如在合并排序中合并......)并创建一个唯一的 IEnumerable
?我用 Zip
试过这个,但在 Zip 中,两个列表大小应该相等(也许你没有得到异常,但也许我们丢失了一些数据。)
此外,我尝试使用 Enumerable.Range(...).Select(...) 但我没有得到可接受的结果。
此外,我的问题与使用 Union 或 this one 完全不同。 ,事实上,正如我所说的,就像在合并排序中合并一样,我喜欢保留列表顺序(实际上只是想填补第一个列表中的一些空白)。
用 for 循环处理它很容易,但我看不到任何完整的 linq 方式。
编辑:
Sample input:
lst1 = {5,10,12}
lst2 = {7,9,16,20,25}
result: {5,7,9,10,12,16,20,25}
O(n + m)
中的两个指针来完成。但我正在
O(n+m)
中寻找 linq 解决方案
var lst1 = new List<int> { 5, 10, 12 };
var lst2 = new List<int> { 7, 9, 16, 20, 25 };
var result = new List<int>();
int j = 0;
for (int i = 0; i < lst1.Count; i++)
{
while (j < lst2.Count && lst2[j] < lst1[i])
{
result.Add(lst2[j]);
j++;
}
result.Add(lst1[i]);
}
while (j < lst2.Count)
{
result.Add(lst2[j]);
j++;
}
Console.WriteLine(string.Join(",", result.ToArray()));
最佳答案
LINQ 中没有这样的方法。而且我认为不可能结合现有的方法来做你想做的事(如果是的话,那就太复杂了)。
但是自己实现这样的方法并不难:
static IEnumerable<T> Merge<T>(this IEnumerable<T> first,
IEnumerable<T> second,
Func<T, T, bool> predicate)
{
// validation ommited
using (var firstEnumerator = first.GetEnumerator())
using (var secondEnumerator = second.GetEnumerator())
{
bool firstCond = firstEnumerator.MoveNext();
bool secondCond = secondEnumerator.MoveNext();
while (firstCond && secondCond)
{
if (predicate(firstEnumerator.Current, secondEnumerator.Current))
{
yield return firstEnumerator.Current;
firstCond = firstEnumerator.MoveNext();
}
else
{
yield return secondEnumerator.Current;
secondCond = secondEnumerator.MoveNext();
}
}
while (firstCond)
{
yield return firstEnumerator.Current;
firstCond = firstEnumerator.MoveNext();
}
while (secondCond)
{
yield return secondEnumerator.Current;
secondCond = secondEnumerator.MoveNext();
}
}
}
lst1.Merge(lst2, (i, j) => i < j)
关于.net - 如何使用 LINQ 执行归并排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717871/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!