【问题标题】:Order a list of tuples订购元组列表
【发布时间】:2017-06-14 10:46:35
【问题描述】:

我有一个这样的元组列表:

List<Tuple<Material, Material>> materials

稍后我将对其进行迭代。但是,元组的 Item2可能null

foreach(var material in materials)
{
    // Do stuff
}

我想订购材料列表,以便首先完成填充了 Item2 的元组(至少不为空)。

我假设它类似于

foreach(var material in materials.OrderBy(*something*))
{
    // Do stuff
}

但是,我还没有真正找到这样做的方法..

【问题讨论】:

  • " 我想订购材料列表,以便首先完成填充了 Item2 的元组(至少不为空)。"

标签: c# list tuples


【解决方案1】:

你可以排序,如果不为空,则为“0”,如果为空,则为“1”。

foreach(var material in materials.OrderBy(t=>t.Item2 == null ? 1 : 0))

这样 null 将在最后。首先是“0”(非空),然后是所有“1”(空)

【讨论】:

  • 这是一个不错的解决方案。 +1
【解决方案2】:

如果你只想要item2!=null 的优先,你可以这样做:

var materialslist = materials.Where(x => x.Item2 != null)
                             .Concat(materials.Where(x => x.Item2 == null)).ToList();
foreach(var material in materialslist)
{
     //Do Stuff
}

【讨论】:

  • 谢谢,让我试一试。我刚刚尝试过 materialen.OrderBy(f => f.Item2 != null).ThenBy(f => f.Item2 == null) 但如果 item2 为空,它似乎不会返回任何项目
  • Paramone 虽然我的回答有效,但我认为@OfirWinegarten 的更优雅。
  • 是的,我也很喜欢你的回答。你有我的赞成票!
【解决方案3】:
foreach(var material in materials.OrderByDescending(s => s.Item2 != null));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多