按字母顺序按长度表示我的意思如下:
下式给出: {“=”,“==>>”,“=>>”,“=>”,“!>” }
我想离开:
!>
=
=>
=>>
==>>
我目前正在使用OrderBy(x => x.Length).ToArray()
谁有更好的lambda?这合理吗?大声笑,我不确定这里的规则约定是什么: - (
答案 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()
为此目的所有工作。