C# 如何使用列表按长度对字符串排序<;字符串>;。分类

C# 如何使用列表按长度对字符串排序<;字符串>;。分类,c#,.net,sorting,C#,.net,Sorting,我想按字符串的长度对列表进行排序 var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"}; 但是我想知道怎么用它。怎么做?有一个代理。这样,您就可以对相应的长度值使用CompareTo方法: weasleys.Sort((x, y) => x.Length.CompareTo(y.Length)); 请注意,与LINQOrderBy方法不同,S

我想按字符串的长度对列表进行排序

var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"};
但是我想知道怎么用它。怎么做?

有一个代理。这样,您就可以对相应的
长度
值使用
CompareTo
方法:

weasleys.Sort((x, y) => x.Length.CompareTo(y.Length));
请注意,与LINQ
OrderBy
方法不同,
Sort
将更改您的
Weasley
列表(如果您有意这样做)。

有一个代理。这样,您就可以对相应的
长度
值使用
CompareTo
方法:

weasleys.Sort((x, y) => x.Length.CompareTo(y.Length));
请注意,与LINQ
OrderBy
方法不同,
Sort
将更改您的
weasley
列表(如果您有意的话)。

这应该可以做到

var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"};
var t = weasleys.OrderBy(x => x.Length).ToList<string>();
var weasley=新列表{“比尔”、“查理”、“珀西”、“弗雷德”、“乔治”、“罗恩”、“金妮”};
var t=weasley.OrderBy(x=>x.Length.ToList();
这应该可以

var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"};
var t = weasleys.OrderBy(x => x.Length).ToList<string>();
var weasley=新列表{“比尔”、“查理”、“珀西”、“弗雷德”、“乔治”、“罗恩”、“金妮”};
var t=weasley.OrderBy(x=>x.Length.ToList();

您可以使用数组列表执行此操作

public class SortStringLength : IComparer
    {
        public int Compare(Object s1, Object s2)
        {
            if (s1.ToString().Length == s2.ToString().Length)
                return String.CompareOrdinal(s1.ToString(), s2.ToString());
            if (s1.ToString().Length > s2.ToString().Length)
                return 1;
            return -1;
        }
    }
然后,使用
IComparer

static void Main(string[] args)
        {
            var weasleys = new ArrayList { "Bill", "Charlie", "Percy", 
                  "Fred", "George", "Ron", "Ginny" };
            var sortLength = new SortStringLength();
            weasleys.Sort(sortLength);

            foreach (var weasley in weasleys)
            {
                Console.WriteLine(weasley);
            }

            Console.ReadLine();
        }
与列表

public class SortStringLength : IComparer<string>
{
    public int Compare(string x, string y)
    {
        if (x.Length == y.Length)
            return String.CompareOrdinal(x, y);
        if (x.Length > y.Length)
            return 1;
        return -1;
    }
}
公共类排序:IComparer
{
公共整数比较(字符串x、字符串y)
{
如果(x.Length==y.Length)
返回字符串.CompareOrdinal(x,y);
如果(x.长度>y.长度)
返回1;
返回-1;
}
}
和用法

static void Main(string[] args)
        {
            var weasleys = new List<string> { "Bill", "Charlie", "Percy", 
                       "Fred", "George", "Ron", "Ginny" };
            var sortLength = new SortStringLength();
            weasleys.Sort(sortLength);

            foreach (var weasley in weasleys)
            {
                Console.WriteLine(weasley);
            }

            Console.ReadLine();
        }
static void Main(字符串[]args)
{
var Weasley=新列表{“比尔”、“查理”、“珀西”,
“弗雷德”、“乔治”、“罗恩”、“金妮”};
var sortLength=新的SortStringLength();
韦斯莱.排序(sortLength);
foreach(韦斯莱的var weasley)
{
控制台。WriteLine(韦斯莱);
}
Console.ReadLine();
}

您可以使用数组列表执行此操作

public class SortStringLength : IComparer
    {
        public int Compare(Object s1, Object s2)
        {
            if (s1.ToString().Length == s2.ToString().Length)
                return String.CompareOrdinal(s1.ToString(), s2.ToString());
            if (s1.ToString().Length > s2.ToString().Length)
                return 1;
            return -1;
        }
    }
然后,使用
IComparer

static void Main(string[] args)
        {
            var weasleys = new ArrayList { "Bill", "Charlie", "Percy", 
                  "Fred", "George", "Ron", "Ginny" };
            var sortLength = new SortStringLength();
            weasleys.Sort(sortLength);

            foreach (var weasley in weasleys)
            {
                Console.WriteLine(weasley);
            }

            Console.ReadLine();
        }
与列表

public class SortStringLength : IComparer<string>
{
    public int Compare(string x, string y)
    {
        if (x.Length == y.Length)
            return String.CompareOrdinal(x, y);
        if (x.Length > y.Length)
            return 1;
        return -1;
    }
}
公共类排序:IComparer
{
公共整数比较(字符串x、字符串y)
{
如果(x.Length==y.Length)
返回字符串.CompareOrdinal(x,y);
如果(x.长度>y.长度)
返回1;
返回-1;
}
}
和用法

static void Main(string[] args)
        {
            var weasleys = new List<string> { "Bill", "Charlie", "Percy", 
                       "Fred", "George", "Ron", "Ginny" };
            var sortLength = new SortStringLength();
            weasleys.Sort(sortLength);

            foreach (var weasley in weasleys)
            {
                Console.WriteLine(weasley);
            }

            Console.ReadLine();
        }
static void Main(字符串[]args)
{
var Weasley=新列表{“比尔”、“查理”、“珀西”,
“弗雷德”、“乔治”、“罗恩”、“金妮”};
var sortLength=新的SortStringLength();
韦斯莱.排序(sortLength);
foreach(韦斯莱的var weasley)
{
控制台。WriteLine(韦斯莱);
}
Console.ReadLine();
}

为什么不能像以前那样使用OrderBy?必须对
t
类使用自定义比较器。为什么不能像以前那样使用OrderBy?必须对
t
类使用自定义比较器。