如何按字母顺序对字符串数组进行排序?

时间:2009-07-02 17:13:10

标签: c# .net sorting lambda

按字母顺序按长度表示我的意思如下:

下式给出: {“=”,“==>>”,“=>>”,“=>”,“!>” }

我想离开:

!>
=
=>
=>>
==>>

我目前正在使用OrderBy(x => x.Length).ToArray()

谁有更好的lambda?

这合理吗?大声笑,我不确定这里的规则约定是什么: - (

8 个答案:

答案 0 :(得分:6)

编写自己的字符串比较器,您可以执行此操作,这符合您发布的两组要求。

    public class MyStringComparer : IComparer<string>
    {
        #region IComparer<string> Members

        public int Compare(string x, string y)
        {
            if (x[0] == y[0])
            {
                return x.Length.CompareTo(y.Length);
            }
            else return x[0].CompareTo(y[0]);
        }

        #endregion
    }

bcde bcd b bced cb

会产生:

b bcd bcde bced cb

和{“=”,“==&gt;&gt;”,“=&gt;&gt;”,“=&gt;”,“!&gt;” }

的产率:

!>
=
=>
=>>
==>>

致电:myStringCollection.OrderBy(x=>x, new MyStringComparer).ToArray();

答案 1 :(得分:5)

我不认为你要做的排序与标准字典排序有什么不同,除非我遗漏了什么。

答案 2 :(得分:1)

如果要按Alpha排序然后按长度排序,请使用OrderBy和ThenBy方法:

var strings = new List<string> { "=", "==>>", "=>>", "=>", "!>" };
strings = strings.OrderBy( x => x ).ThenBy( x => x.Length ).ToList();
strings.ForEach( Console.WriteLine );

答案 3 :(得分:1)

我正在使用列表,我一直在尝试在线搜索解决方案。我发现的任何东西都不适合我。我决定创建一个按长度对元素进行排序的方法。要按字母顺序排序,我使用集合排序。

    subfolders.Sort();
    public void SortByLength(List<string> subfolders)
    {
        int l = 0;
        int l2 = 0;
        for (int i = subfolders.Count() - 1; i != 0; i--)
        {
            l = subfolders[i].Length;
            if (i != subfolders.Count() - 1 && l2 < l)
            {
                string folder = subfolders[i + 1];
                subfolders.RemoveAt(i + 1);
                subfolders.Insert(0, folder);
            }
            l2 = l;
        }
    }

答案 4 :(得分:1)

您可以使用以下方法对数组进行排序。在这里,我用中间字母对数组进行排序。 我认为这会有所帮助。

string[] names = { "Rajeshwar","Raj", "Vijay", "Sunil","Dhiresh","Sonmani" };
names = names.OrderBy(x => x.Substring(x.Length/2,1)).ToArray();

答案 5 :(得分:0)

我对你的问题并不完全清楚,但似乎你想首先按字符串长度排序然后按字母顺序排列

您可以尝试将其作为LINQ解决方案:

vals = vals.OrderBy(str => str.Length).ThenBy(str => str).ToArray();

如果你想要一个(更有效的)不使用LINQ的解决方案(尽管仍然可以很好地使用lambda表达式),你可以尝试以下方法:

Array.Sort(vals, (strA, strB) =>
{
    var lengthComp = Comparer<int>.Default.Compare(strA.Length, strB.Length);
    if (lengthComp == 0)
        return string.Compare(strA, strB);
    return lengthComp;
});

希望有所帮助。

答案 6 :(得分:0)

我尝试使用您提供的测试数据OrderBy(x => x),并且产生了您想要的输出。

如果它是你从头开始的数组,你可以使用Array.Sort方法:

Array.Sort(data);

编辑:
以上内容不适用于您在问题中提出的新数据。等待对数据的澄清(如对问题的评论)。

答案 7 :(得分:-4)

使用标准字符串比较函数进行排序应该完全正确。

中的strncmp()

C ++中的String.compare()

Java中的String.compareTo()

为此目的所有工作。