按降序排列的可枚举范围

Posted

技术标签:

【中文标题】按降序排列的可枚举范围【英文标题】:Enumerable range in descending order 【发布时间】:2015-05-02 08:41:12 【问题描述】:

我正在使用enumerable.range() 绑定一个组合框,它工作正常。 现在我想按降序显示结果,我该怎么做?

  cboYearList.ItemsSource = Enumerable.Range( DateTime.Today.Year,1950).ToList().OrderByDescending();

【问题讨论】:

您可以在设置组合框的 itemsSource 之前尝试对数据进行排序。 感谢格兰特·温尼 【参考方案1】:

我编写了一个可以应用于ValueTuple<int,int> 的扩展方法,如果您的语言版本已经支持它们,我认为这是最简单的使用方法。在您的示例中,将像这样使用:

cboYearList.ItemsSource = (DateTime.Today.Year, 1950).EnumerateInclusive().ToList();
cboYearList.ItemsSource = (1950, DateTime.Today.Year).EnumerateInclusive().ToList(); //reverse

我实现了这样的扩展方法。只需将其放在命名空间中的静态类中即可。

/// <summary>
/// Enumerates all values between the first and second value in range. 
/// Automatically handles the enumeration-direction.
/// </summary>
/// <param name="range">The first parameter specifies the first value of the enumeration, 
/// the second parameter specifies the last value of the enumeration.</param>
public static IEnumerable<int> EnumerateInclusive(this (int start, int end) range)

    if (range.start <= range.end)
        for (int i = range.start; i <= range.end; i++)
            yield return i;
    else
        for (int i = range.start; i >= range.end; i--)
            yield return i;

选择名称很明显,开始和结束都包含在枚举中。与仅迭代升序的Enumerable.Range 相比,它具有支持双向迭代的优势。如果您需要针对较旧的语言版本,您可以轻松地不使用 ValueTuples,但我喜欢这种简洁明了的方式,无需记住类名。

【讨论】:

不错的扩展,但它不能正常工作。反向for循环应该是for (int i = range.start; i &gt;= range.end; i--) 谢谢@Denis,我在上面修好了。原文是第 13 行中的for (int i = range.end; i &gt;= range.start; i--)【参考方案2】:

创建列表后可以ReverseEnumerable.Range:

cboYearList.ItemsSource = Enumerable.Range(DateTime.Today.Year, 1950).Reverse().ToList();

或者如果你想保留你的OrderByDescending,你需要传递一个键选择器(i =&gt; i在末尾):

cboYearList.ItemsSource = Enumerable.Range( DateTime.Today.Year,1950).OrderByDescending(i => i).ToList();

【讨论】:

感谢支持:` int numberOfyears = DateTime.Now.Year - 1900; cboYearList.ItemsSource = Enumerable.Range(1900, numberOfyears).Reverse().ToList(); ` Reverse() 的默认实现使用中间缓冲区,这可能会导致内存使用不理想。

以上是关于按降序排列的可枚举范围的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy 按降序排列?

Vertica - 按降序排列的投影

Codeigniter 分页链接按降序/倒序排列?

如何在 Firebase 中按降序排列数据 - Python

使用 plotly-express 按值按降序排列条形图中的条形

WP-API 获取帖子并按降序排列