Ian Griffiths가 C#에서 만든이 자연 정렬 클래스를 보았습니다 (http://www.interact-sw.co.uk/iangblog/2007/12/13/natural-sorting).내 코드에서이 클래스를 사용하는 방법
내 코드의 개체 목록을 개체 이름별로 정렬하려면 (객체의 필드로 어떻게 처리 할 것인가) 어떻게 사용합니까? 오류를 내놓았다
내가 시도 ...
System.Func<MyObjectClass, string> ConvertMyObject = str =>
{
return str.ToString();
};
listObjects = listObjects.OrderBy(str => Regex.Split(str, "([0-9]+)").Select(ConvertMyObject), new EnumerableComparer<MyObjectClass>());
감사합니다!
/// <summary>
/// Compares two sequences.
/// </summary>
/// <typeparam name="T">Type of item in the sequences.</typeparam>
/// <remarks>
/// Compares elements from the two input sequences in turn. If we
/// run out of list before finding unequal elements, then the shorter
/// list is deemed to be the lesser list.
/// </remarks>
public class EnumerableComparer<T> : IComparer<IEnumerable<T>>
{
/// <summary>
/// Create a sequence comparer using the default comparer for T.
/// </summary>
public EnumerableComparer()
{
comp = Comparer<T>.Default;
}
/// <summary>
/// Create a sequence comparer, using the specified item comparer
/// for T.
/// </summary>
/// <param name="comparer">Comparer for comparing each pair of
/// items from the sequences.</param>
public EnumerableComparer(IComparer<T> comparer)
{
comp = comparer;
}
/// <summary>
/// Object used for comparing each element.
/// </summary>
private IComparer<T> comp;
/// <summary>
/// Compare two sequences of T.
/// </summary>
/// <param name="x">First sequence.</param>
/// <param name="y">Second sequence.</param>
public int Compare(IEnumerable<T> x, IEnumerable<T> y)
{
using (IEnumerator<T> leftIt = x.GetEnumerator())
using (IEnumerator<T> rightIt = y.GetEnumerator())
{
while (true)
{
bool left = leftIt.MoveNext();
bool right = rightIt.MoveNext();
if (!(left || right)) return 0;
if (!left) return -1;
if (!right) return 1;
int itemResult = comp.Compare(leftIt.Current, rightIt.Current);
if (itemResult != 0) return itemResult;
}
}
}
}
StackOverflow에 오신 것을 환영합니다. 지금까지 당신을 위해 일하지 않은 것은 무엇입니까? 네가 묻는 것은 정확히 무엇인가? 귀하의 게시물이 "나는이 코드를 가지고 있는데, 어떻게 사용합니까?"라는 메시지가 나타납니다.이 경우 적절한 질문이 아닙니다. 우리는 튜토리얼 사이트가 아닙니다. 구체적인 질문이 있으시면 저희에게 도움을 요청하십시오. 감사. :-) –
대신이 코드 작성자에게 묻지 않습니까? – zerkms
감사합니다. 나는 "튜토리얼"그 자체를 묻지 않았습니다. 그래서 내가 시도한 것은 Enumerable test = new Enumerable (); listObjects.Sort (test.Compare()); // List listObjects –
user1420850