【发布时间】:2018-06-25 12:26:50
【问题描述】:
我有 2 个列表,一个是原始列表,另一个是排序列表。 我想按第二个列表对第一个列表进行排序,但我的方法不会返回任何内容,因此它必须对列表进行适当的排序。
我做了这个方法:
public void SortByList(IEnumerable<JObject> source, IEnumerable<JObject> products)
{
var ids = source.Select(m => m["_id"].ToString()).ToList();
products.OrderBy(m => ids.IndexOf(m["_id"].ToString()));
}
但如您所知,OrderBy 会创建一个新列表。我如何Sort 使用 ID?
【问题讨论】:
-
您可以使用
Comparison<T>代表就地排序:stackoverflow.com/a/3309292/860585 -
或
IComparer<T>。但是,当您的参数为IEnumerable<JObject>时,这将不起作用 - 您可以将其更改为List<JObject>吗? -
使用 yield 语法
public IEnumerable<JObject> ...并在方法内部编写实际代码。但不是返回列表,而是使用yield return返回单个条目。 C# 将尽一切努力使其成为IEnumerable<>以进一步增强,然后您可以通过将方法设为静态并在源代码前添加this来使该方法成为静态扩展 -
如果您需要保持
IEnumerable的身份,@X39 建议的方法是唯一的选择。否则,为了对其进行排序,您必须将其转换为具体类型,例如List<JObject>. -
你说的那些名单在哪里?
标签: c#