那是我的代码......
string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis nisl vitae dolor tempus iaculis at id augue. Nullam metus mauris, viverra vitae tristique sed, pulvinar ac nulla."
List<object> listCarac = new List<object>();
object aux = 0;
text.Replace(" ", "");
for (int i = 0; i < text.Count(); i++)
{
listCarac.Add(text.Substring(i,1));
}
for (int x = 0; x < listCarac.Count(); x++)
{
for (int y = x + 1; y < listCarac.Count(); y++)
{
if (listCarac[x] > listCarac[y]) // My problem is here
{
aux = listCarac[x];
listCarac[x] = listCarac[y];
listCarac[y] = aux;
}
}
}
我的问题是如何按字典顺序进行比较,我想if是按字母顺序比较。 感谢。
答案 0 :(得分:0)
您的列表包含object
类型的实例,但未实现IComparable
,因此您无法调用instance1 < instance2
。但是,由于您只将单个字符放入列表中,我猜您可以使用List<char>
代替甚至更简单string
而不是列表。
因此你现在可以这样称呼:
listCarac = listCarac.OrderBy(x => x).ToList();
这会以字面顺序排列你的角色。
此外,当调用string.Replace
时,方法返回结果,因为字符串是不可变的。因此,在第一个循环中,您使用text
的原始内容而不是替换的内容。请改用:text = text.Replace(" ", "");
编辑:如果 - 正如您在评论中声明的那样 - 您必须使用object
列表以及此列表中的所有实例IComparable
(char
可以)在排序之前简单地将实例强制转换为接口:
var result = listCarac.OfType<IComparable>().OrderBy(x => x);
答案 1 :(得分:0)
我们对object
了解不多,但我们知道IComparable项目。
我建议您将列表更改为
var listCarac = new List<IComparable>();
而不是使用接口方法CompareTo
int CompareTo(
object obj
)
哪个会改变
if (listCarac[x] > listCarac[y])
要
if (listCarac[x].CompareTo(listCarac[y]) > 0)
答案 2 :(得分:0)
我认为您可以利用为List提供的SORT方法。如有必要,您可以提供比较器来处理特定情况。
String text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis nisl vitae dolor tempus iaculis at id augue. Nullam metus mauris, viverra vitae tristique sed, pulvinar ac nulla.";
text = text.Replace(" ", "");
List<char> demo = text.ToCharArray().ToList();
demo.Sort();
string result = System.Text.Encoding.UTF8.GetString(demo.Select(c => (byte)c).ToArray());