Если в проводнике винды выделить их все и начать куда-то перетаскивать, то туда они попадают не по порядку. Например, если взяться за 7-ой, то первыми прилетят 7, 8, 9, 10, 11..., а первые 6 будут где-нибудь в конце или середине списка. И так с любыми файлами, не зависимо от того, как они называются.
Проверял этим кодом:
Вот и встал вопрос, как их отсортировать?
На Delphi можно так:
if s1 < s2 then
Где-то раньше читал, что так можно только на Delphi и больше нигде. Не знаю, насколько это правда.
А на C# как?
Если есть список из вот таких объектов:
internal class FileChunk
{
public string FileName { get; private set; }
public long FileSize { get; private set; }
public FileChunk(string fileName, long fileSize)
{
FileName = fileName;
FileSize = fileSize;
}
}
А это разве не то же самое получится? Не похоже, чтобы оно быстрее было.
Зачем такое городить? Там, вроде, всё сводится к вызову CompareTo(...). Нельзя его просто в моём коде вызвать?
Потому что скорость не важна. Программа для одноразового использования.
// Default comparer for Part type.
public int CompareTo(Part comparePart)
{
// A null value means that this object is greater.
if (comparePart == null)
return 1;
else
return this.PartId.CompareTo(comparePart.PartId);
}
// This shows calling the Sort(Comparison(T) overload using
// an anonymous method for the Comparison delegate.
// This method treats null as the lesser of two values.
parts.Sort(delegate(Part x, Part y)
{
if (x.PartName == null && y.PartName == null) return 0;
else if (x.PartName == null) return -1;
else if (y.PartName == null) return 1;
else return x.PartName.CompareTo(y.PartName);
});
А что это за магия такая? Если в метод Sort передаётся делегат сравнения, зачем тогда в классе Part весь остальной код? Это перегрузка операторов сравнения?
using System;
using System.Linq;
public class Program
{
public static void Main()
{
Random rand = new Random();
var items = Enumerable.Range(0, 10)
.Select(i => new Tuple<string, int>(rand.Next(100).ToString(), i))
.ToList();
items.ForEach(Console.WriteLine);
items.Sort((a, b) => a.Item1.CompareTo(b.Item1));
Console.WriteLine("Sorted");
items.ForEach(Console.WriteLine);
}
}
Может какая-нибудь секретная настройка есть для таких случаев?
То есть преобразовывать к числам, а потом сортировать? Я уже думал об этом.
Но тогда зачем дополнительное поле? Можно же сразу при сравнении это делать.