- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 LINQ 查询:
TempRecordList = new ArrayList(TempRecordList.Cast<string>().OrderBy(s => s.Substring(9, 30)).ToArray());
它运行良好,排序方式准确但与我想要的略有不同。在查询结果中,我看到类似这样的内容:
帕姆-布特,彼得
肖恩·帕默-约翰逊
而我真正需要的是像这样对名称进行排序:
肖恩·帕默-约翰逊
Palm-Bouter,彼得
基本上,我希望将“-”字符视为低于该字符的字符,以便包含它的名称稍后在升序搜索中显示。
这是另一个例子。我得到:
迪亚斯,雷金纳德
迪布莱克利,安东
代替:
迪布莱克利,安东
迪亚斯、雷金纳德
如您所见,由于大写字母“B”的处理方式,顺序再次发生了变化。
所以我的问题是,我需要在我的 LINQ 查询中更改什么以使其按我指定的顺序返回结果。任何反馈将不胜感激。
顺便说一句,我尝试使用 s.Substring(9, 30).ToLower() 但没有帮助。
谢谢!
最佳答案
要自定义排序顺序,您需要创建一个实现 IComparer<string>
的比较器类界面。 OrderBy()
方法将比较器作为第二个参数。
internal sealed class NameComparer : IComparer<string> {
private static readonly NameComparer DefaultInstance = new NameComparer();
static NameComparer() { }
private NameComparer() { }
public static NameComparer Default {
get { return DefaultInstance; }
}
public int Compare(string x, string y) {
int length = Math.Min(x.Length, y.Length);
for (int i = 0; i < length; ++i) {
if (x[i] == y[i]) continue;
if (x[i] == '-') return 1;
if (y[i] == '-') return -1;
return x[i].CompareTo(y[i]);
}
return x.Length - y.Length;
}
}
这至少适用于以下测试用例:
var names = new[] {
"Palmer-Johnson, Sean",
"Palm-Bouter, Peter",
"Dias, Reginald",
"DiBlackley, Anton",
};
var sorted = names.OrderBy(name => name, NameComparer.Default).ToList();
// sorted:
// [0]: "DiBlackley, Anton"
// [1]: "Dias, Reginald"
// [2]: "Palmer-Johnson, Sean"
// [3]: "Palm-Bouter, Peter"
关于LINQ 和 CASE 敏感性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328737/
我有这个 LINQ 查询: TempRecordList = new ArrayList(TempRecordList.Cast().OrderBy(s => s.Substring(9, 30)).
我想和实习生一起测试一些 DOM 相关的东西,不需要特定的固定装置,只是一般的 DOM 东西,比如我改变了 Element.prototype。这是否需要通过本地 Selenium 服务器(或 sau
我在 R 中使用插入符号进行逻辑回归: ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10,
我在 IE 9 (9.0.8112.16421) 上看到一种奇怪的行为,即使用 iframe.setAttribute( 'src', 'http) 通过 javascript 更改 iframe 的
我想对具有三个均匀分布参数的模型执行敏感性分析: install.packages("sensitivity") library(sensitivity) params <- c("param1","
我是一名优秀的程序员,十分优秀!