【问题标题】:Vb.net / C# - sort list/array starting from a mid pointVb.net / C# - 从中​​点开始排序列表/数组
【发布时间】:2016-09-28 19:38:08
【问题描述】:

是否有一种简单的方法可以从特定值开始对列表进行排序?

A B C D E F

所以我们可以从传入的值开始,比如'C'

C D E F A B

我想优化一个时隙列表,最好从一个开始时间对顺序进行排序,这样它就不需要一直迭代它不需要。

【问题讨论】:

  • 请详细说明。您给出的示例已经排序,看起来更像是重新排序元素?!
  • 很抱歉。我可以像大多数简单排序一样使用匿名函数进行排序。所以列表已经排序,但想要一个自定义起点来开始订单。
  • 实现你自己的归并排序算法并发送你想要排序的范围。
  • 更进一步。我正在定义一个时间段列表,08:00、10:00、17:00、19:00、22:00 等。我正在检查时间范围的每一分钟以找到每分钟适合的时间段。一天中有很多分钟,所以只是试图优化一点,有很多时间段。对1-3来说还不错。我当前的代码在分配每分钟时停止检查。
  • 您应该只编辑您的问题,将您在 cmets 中解释的详细信息添加到问题本身,以便人们更容易回答。

标签: c# vb.net list sorting sql-order-by


【解决方案1】:

你可以使用:

ArrayList.Sort(int index, int count, IEqualityComparer comparer)

此方法使用指定的比较器对 ArrayList 中的元素范围内的元素进行排序。

参数

索引

类型:System.Int32 要排序的范围的从零开始的起始索引。

计数

类型:System.Int32

要排序的范围的长度。

比较器

类型:System.Collections.IComparer 要使用的 IComparer 实现 比较元素时。

-或-

使用 IComparable 的空引用(在 Visual Basic 中为 Nothing) 每个元素的实现。

这里有一个例子说明如何使用它。

ArrayList.Sort Method

如果您不知道如何实现平等比较器,您也可以查看post

更新:

来自您的数组:A B C D E F

假设它在这个对象中并且被实例化了:

List<string> array;

所以你可以这样做:

public List<string> foo(List<string> array, int i) { 
  array.Sort(i, array.size() - i, null);
  List<string> aux = array.Skip(i).Take(array.Size() - i );
  aux.AddRange(array.Take(i));
  return aux;
}

你这样称呼它:

List<string myNewArray = foo(array, 2);

【讨论】:

  • 但这是否只是让列表的第一部分在起始索引上方的任何位置未排序?
  • 是的,它将从索引,n 个元素开始排序。其中 n 是计数参数。
  • 但我希望最接近的匹配项在索引 0 处结束,然后从那里按顺序排列其他所有内容,然后循环。 B、C、F、A、D、E 变为 'C'、D、E、F、A、B
  • 分成两部分,分别排序并将第二部分附加到第一部分。
  • 这种拆分确实让我想到了一种选择。我认为这是一个小手册,并希望有一些我没有遇到过的聪明的 .net 功能。
【解决方案2】:
    static void Main(string[] args)
    {
        char[] z = new char[] { 'B', 'C', 'F', 'A', 'D', 'E' };
        Array.Sort(z);

        char[] x,y;
        Split<char>(z, 2, out x, out y);

        char[] combined = y.Concat(x).ToArray ();
    }
    public static void Split<T>(T[] array, int index, out T[] first, out T[] second)
    {
        first = array.Take(index).ToArray();
        second = array.Skip(index).ToArray();
    }

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2011-07-20
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2021-12-12
    • 2018-04-28
    相关资源
    最近更新 更多