我在学校有一个任务,我必须用这些姓氏命名一个数组:"Čop", "Dugonik" and "Caf"
用斯洛文尼亚字母表。没有"Čop"
,它可以使用简单的"bubble sort"
,但使用"Čop"
我无法使其正常工作。我通过ASCII表比较字符。斯洛文尼亚字母表:A,B,C,Č,D,......任何想法?当我按ENG字母排序时,它可以工作。我将2个姓氏与此函数进行比较(+ 1个简单的冒泡排序函数用于排序):
static bool Uredi(Stranka stranka1, Stranka stranka2)
{
bool prviJeManjši = false;
int dolžinaKrajšegaPriimka;
// zagotovi da nebo prvi priimek daljši od drugega
if (stranka1.priimek.Length > stranka2.priimek.Length)
{
dolžinaKrajšegaPriimka = stranka2.priimek.Length;
}
else
{
dolžinaKrajšegaPriimka = stranka1.priimek.Length;
}
for (int i = 0; i < dolžinaKrajšeBesede; i++)
{
if ((char)stranka1.priimek[i] < (char)stranka2.priimek[i])
{
prviJeManjši = true;
break;
}
}
return prviJeManjši;
}
答案 0 :(得分:-1)
您需要实现IComparer Interface或Comparison Delegate。 以下是使用lambda表达式
的方法 List<String> list = new List<string>() { "Čop", "Dugonik", "Caf" };
string alphabet = "ABCČDEFGHIJKLMNOPQRSTUVWXYZ";
list.Sort((s1,s2) =>
{
s1 = s1.ToUpper();
s2 = s2.ToUpper();
if (s1 != s2)
{
for (int i = 0; i < s1.Length; i++)
{
if (s1[i] != s2[i])
{
int index1 = alphabet.IndexOf(s1[i]);
int index2 = alphabet.IndexOf(s2[i]);
if (index1 != index2)
return index1 - index2;
}
}
}
return 0;
});
list.ForEach(i => Console.WriteLine(i));
Console.ReadKey();
当然你需要修改字母..
顺便说一句,我也想要一个等级:)
您还可以将当前文化更改为Slovanian
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("sl-SI");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;