【问题标题】:C# highest stringC# 最高字符串
【发布时间】:2026-02-18 14:45:02
【问题描述】:

这似乎微不足道,但我无法通过 Google 找到答案。

我在一个字符串的排序列表末尾寻找一个高值的信号量。

在我看来 char.highest.ToString() 应该这样做——但这比较低,而不是高。

显然,创建尽可能高的字符串并不是真正可能的,因为它总是低于同一事物 + 更多数据,但我正在排序的字符串都是有效的路径名,因此使用的符号受到限制。

回应cmets:

在 Delphi 还没有 unicode 的日子里,我只会使用 #255。我只是想要一个比任何可能的路径名都高的字符串。这应该是微不足道的——为什么不是呢??

响应 #2:

需要哨兵的不是排序,是事后的处理。我有多个要合并的列表(简单的合并不会完成这项工作。)我要么重复代码,要么我有总是比较高的虚拟值。

【问题讨论】:

  • 最高字符串是什么意思?能举个例子吗?
  • 为什么需要这个?也许如果你告诉我们为什么你的排序算法需要一个哨兵(这是这类事情的正确名称),也许有人会给你一个更好的方法。

标签: c# string sorting


【解决方案1】:

最高字符的字符串表示将只有一个字符长。

您为什么不在排序后将其作为信号量附加,而不是尝试使其成为事后排序的东西?

或者,您可以指定自己的比较器,将令牌排序在任何其他字符串之后,否则调用默认比较器。

【讨论】:

  • 自定义比较器可能是他这样做的最简单的方式。让它说某个标记大于所有其他字符串(除了它自己)。
【解决方案2】:

在尝试将空值放在 LINQ OrderBy() 语句中的列表底部时,我遇到了同样的问题。我最终使用...

Char.ConvertFromUtf32(0x10ffff)

...这是一种享受。

【讨论】:

    【解决方案3】:

    这样的?

    public static String Highest(this String value)
    {
        Char highest = '\0';
        foreach (Char c in value)
        {
            highest = Math.Max(c, highest); 
        }
        return new String(new Char[] { highest });
    }
    

    【讨论】:

    • 你的可能会失败。输入:“zz”。你的输出“​​z”排序较低。