LINQ OrderBy使用IEnumerable <T>键

and*_*eer 2 c# linq

我有一个IEnumerable,我想要排序不是在每个序列内,而是从序列到序列.

new [] {"Z", "B", "C" }
new [] {"A", "B", "C" }
new [] {"B", "B", "C" }
Run Code Online (Sandbox Code Playgroud)

new [] {"A", "B", "C" }
new [] {"B", "B", "C" }
new [] {"Z", "B", "C" }
Run Code Online (Sandbox Code Playgroud)

是否存在LINQ的现有方法或者我是否需要滚动自己的IComparer?

Eri*_*ert 5

没有任何内置的东西.滚动你自己的辅助方法很简单; 只要序列长度相同,它就是一行.

static int SequenceCompare<T>(
    this IEnumerable<T> x, 
    IEnumerable<T> y, 
    Func<T, T, int> comparer) =>
  x.Zip(y, comparer).FirstOrDefault(c => c != 0);
Run Code Online (Sandbox Code Playgroud)

现在,如果您可以比较序列的两个成员,您还可以比较两个序列.

如果序列长度不等,则不起作用; 你必须做更多的工作来说"A","B","C"比"A","B""更大".

练习:解决长度不等的序列的问题.(提示:检查相应的实现Zip并进行相应的修改.)

练习:假设我们有一个比较函数Func<T, T, int>.我们已经看到了如何将其扩展到Func<IEnumerable<T>, IEnumerable<T>, int>.现在假设论点Task<T>,或Func<T>Nullable<T>Lazy<T>-你怎么可能实现类似的比较?哪些是容易的,哪些是难的,为什么?