gpt4 book ai didi

c# - listbox.sort 和字符串比较函数的小问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:44 24 4
gpt4 key购买 nike

我在列表框对其元素排序的方式和 CompareTo 函数的差异方面遇到了麻烦。

问题是,我正在使用两个列表框,并试图制作两个仅出现在其中一个列表框中的元素列表。两个列表框都使用 sorted 属性进行排序。

我的程序遍历列表框,并使用 CompareTo 函数一一比较元素:

if (listBox1.Items[x].ToString().CompareTo(listBox2.Items[y].ToString())) > 0 etc.

现在,一切正常,除了包含撇号 (') 的项目 - 如“Donald's Pizza”:

在排序列表框中,“Donald's Pizza”排在“Donald Duck”之前。撇号小于空格。但是使用 CompareTo 函数,“Donald's Pizza”大于“Donald Duck”。“CompareTo”表示,撇号 大于 空格!

这弄乱了我的系统。

如果我知道这只是导致问题的撇号,我可以轻松地制定解决方法,但现在我不确定它是否也适用于其他字符。

作为解决方案,我必须对列表框进行自己的排序过程,但我是否只是忽略了一些明显的东西?

编辑:感谢您的回答。

我最终基于 CompareTo 函数制作了自己的排序程序。这样我可以确定列表框的类型 100% 等于我稍后使用的 CompareTo 函数。

    public ListBox fn_sort_listbox(ListBox par_listbox)
{
ListBox lb_work = new ListBox();
int in_index;
int in_compare;

if (par_listbox.Items.Count == 0) return lb_work;

foreach (object i in par_listbox.Items)
{
in_index = 0;
while (in_index < lb_work.Items.Count)
{
in_compare = lb_work.Items[in_index].ToString().CompareTo(i.ToString());
if (in_compare > 0)
{
break;
}
in_index++;
}
lb_work.Items.Insert(in_index, i.ToString());
}

return lb_work;
}

最佳答案

Microsoft 站点上的示例比较器按照与 ListBox 相同的顺序进行比较。所以下面的代码在“Donald Duck”之前生成“Donald's Pizza”。

  string[] strings = new string[2] { "Donald Duck", "Donald's Pizza" };
Array.Sort(strings, new MyStringComparer(CompareInfo.GetCompareInfo("en-US"),
CompareOptions.StringSort));
foreach (string item in strings)
Console.WriteLine(item);

MyStringComparer 来自 here并实现为:

public class MyStringComparer : IComparer
{
private CompareInfo myComp;
private CompareOptions myOptions = CompareOptions.None;

// Constructs a comparer using the specified CompareOptions.
public MyStringComparer(CompareInfo cmpi, CompareOptions options)
{
myComp = cmpi;
this.myOptions = options;
}

// Compares strings with the CompareOptions specified in the constructor.
public int Compare(Object a, Object b)
{
if (a == b) return 0;
if (a == null) return -1;
if (b == null) return 1;

String sa = a as String;
String sb = b as String;
if (sa != null && sb != null)
return myComp.Compare(sa, sb, myOptions);
throw new ArgumentException("a and b should be strings.");

}
}

关于c# - listbox.sort 和字符串比较函数的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com