当前位置: 首页 > 知识库问答 >
问题:

按升序和降序排序链表

宁修永
2023-03-14

我有一个通用的链表,目前由int组成,我想在默认情况下按升序排序,然后切换一个布尔值,按降序排序。我该怎么做?

共有2个答案

司寇书
2023-03-14

如果您使用。NET的链接列表

此扩展方法返回LinkedList类型的排序副本

public static LinkedList<TSource> SortedAscending<TSource, TKey>(
    this LinkedList<TSource> source,
    Func<TSource, TKey> keySelector)
{
    LinkedList<TSource> tempLinkedList = new LinkedList<TSource>();
    IEnumerable<TSource> orderedEnumerable = source.OrderBy(keySelector).AsEnumerable();
    orderedEnumerable.ForEach(value => tempLinkedList.AddLast(value));
    return tempLinkedList;
}

此扩展方法对类型LinkedList的源进行排序

public static void SelfSortAscending<TSource, TKey>(
    this LinkedList<TSource> source,
    Func<TSource, TKey> keySelector)
{
    LinkedList<TSource> tempLinkedList = new LinkedList<TSource>(source);
    source.Clear();
    IEnumerable<TSource> orderedEnumerable = tempLinkedList.OrderBy(keySelector).AsEnumerable();
    orderedEnumerable.ForEach(value => source.AddLast(value));
}

降序的扩展方法可以在以下位置找到:LinkedListHelper(GitHub链接)

顺便说一句,。Foreach()您可以这样实现:

public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
    if (action == null)
        throw new ArgumentNullException(nameof(action));

    foreach (T element in source)
        action(element);
}

潘刚洁
2023-03-14

假设您的链表实现了IEnumerable

对于int,默认比较器很好,所以您只需编写:

bool ascending = true;
var orderedEnumerable = ascending ? collection.OrderBy(x => x) : collection.OrderByDescending(x => x);

或者,使用函数和默认参数:

IOrderedEnumerable<int> GetOrderedNumbers(bool ascending = true)
{
      return ascending ? collection.OrderBy(x => x) : collection.OrderByDescending(x => x);
}

订购方的MSDN:http://msdn.microsoft.com/en-us/library/vstudio/bb534966(v=vs.100)。aspx公司

 类似资料:
  • 有人能提供帮助,如何检查排序降序数组以及?干杯!

  • 问题内容: 我有一个带有产品的mysql表。 这些产品具有类别ID和名称。 我想做的是按类别ID顺序降序排列,然后按产品名称升序排列。 我想要的是 不幸的是,这是行不通的。 甚至可以在mysql中定义第二个排序列的排序顺序吗? 问题答案: 您可以通过以下方式进行操作: 看看优化

  • 考虑下面的哈希图: 具有诸如 我需要按值对hashmap进行降序排序,但如果值相等,则按键进行升序排序: 到目前为止,我试着分别按键排序,然后按值排序,但我不相信这种方法。除了创建更多的hashmaps之外,还有什么好方法呢?

  • 我有数据。表中有大约300万行和40列。我希望在组内按降序对该表排序,如以下sql模拟代码: 数据中是否存在等效的方法。这张桌子可以吗?到目前为止,我必须将其分解为两个步骤: 这非常快,只需要几秒钟。 这一步需要更长的时间(5分钟)。 更新:有人评论要执行<code>X 我的方法是:setkey()然后是order(-Month) 我现在的问题是:如果我想按年、MemberId和一个又一个排序(年

  • 我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在