【问题标题】:Who is the greatest among all strings?谁是所有弦乐中最伟大的?
【发布时间】:2016-11-03 16:26:07
【问题描述】:

我在DataTable 中插入了一个特殊(摘要)行,我希望它在排序后的DataView 中出现在最后。我知道DataView 正在按特定字符串列进行排序(升序),并且出于显示目的,摘要行的该列中显示的值无关紧要。

我可以在该字段中放置什么字符串以确保我的摘要行被排序到最后?对于几乎任何其他数据类型的列,我可以使用T.MaxValue,但遗憾的是没有System.String.MaxValue 常量。

我已经试过了

footerRow[colGrouping] = "\uFFFF";

但排在最前面! (DataView 排序是按字典顺序排列的,而不是基于代码点的数值)

【问题讨论】:

  • 字典顺序将取决于文化,因此在一般情况下这可能很难做到。但是,someone reckons you can use U+E83A
  • 也许你知道其他字符串是什么文化\语言?
  • 为什么不把它放在最后一列而不是最后一行?
  • @BenVoigt 好吧,你说得有道理,我的建议很愚蠢。您是否将此数据视图提供给网格或类似的东西?为什么不只是添加新的网格/表格并为其提供摘要行。按一些 magic string 排序听起来很 hacky。
  • 这听起来从一开始就是个坏主意。我希望表中的数据是表中的数据,而不是表中的数据加上其他一些特殊的东西。我会更倾向于通过将数据和特殊的东西分开,对数据进行排序,并将特殊的东西连接到最后来解决问题。

标签: c# .net string sorting lexicographic


【解决方案1】:

如果我在不了解字典顺序的情况下使用它,我会说 \uFF70

var table = new DataTable("table");
table.Columns.Add("column");

for (int i = 0; i < 65536; i++)
{
    var row = table.NewRow();
    row["column"] = (char)i;
    table.Rows.Add(row);
}

var view = new DataView(table);
view.Sort = "column";
var last = ((string)view[65535]["column"])[0];
//last is 0xff70 'ー'    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多