我正在开发一个应用程序,其中有一个我自己定义的类型的C#列表,它具有约7列和几行数据。特别是我有一列Term
字符串类型,通常包含字母数字项。
样本数据
Time Product Term Strike Strategy Premium Volume
8:52:00 LN F15-H15 350 PUT 0.106 100
8:33:29 LN V14 400 CALL 0.033 100
9:42:51 LN X14-J14 425 CALL 0.059 100
10:14:14 LN X15-V15 325 PUT 0.1325 25
12:11:23 LN H15 vs X14 450 CS 0.229 1000
12:12:03 LN H15 vs X14 450 CS 0.229 550
12:12:58 LN J14 vs F14 450 CS 0.229 100
12:13:33 LN H15 vs X14 450 CS 0.229 100
12:14:20 LN X14 vs H15 450 CS 0.229 100
从上面的列表中可以看到,我有一个名为Term的列,我试图在每个具有符号的单元格中进行排序,"-" (hyphen)
并"vs"
在该单元格中进行排序,例如按数字和字母顺序对它们进行排序,例如在我拥有的Term Column的第三行中,X14-J14
但是我想要要按字母顺序排序并使其J14-X14
数字相同,但如果数字不同,则应通过赋予数字更高的优先级H15 vs X14
来进行排序,就像应该优先排序,因为X14 vs H15
较低的数字优先于字母。
结果数据将存储在列表中,并且应类似于
Time Product Term Strike Strategy Premium Volume
8:52:00 LN F15-H15 350 PUT 0.106 100
8:33:29 LN V14 400 CALL 0.033 100
9:42:51 LN J14-X14 425 CALL 0.059 100
10:14:14 LN V15-X15 325 PUT 0.1325 25
12:11:23 LN X14 vs H15 450 CS 0.229 1000
12:12:03 LN X14 vs H15 450 CS 0.229 550
12:12:58 LN F14 vs J14 450 CS 0.229 100
12:13:33 LN X14 vs H15 450 CS 0.229 100
12:14:20 LN X14 vs H15 450 CS 0.229 100
有什么好办法可以解决这个问题吗?
没有一个很好的方法可以做到这一点。将会有字符串操作,其中有很多:
public string SortTerm(string term) {
Match match = Regex.Match(term, @"([a-z]\d{2})(-| vs )([a-z]\d{2})", RegexOptions.IgnoreCase);
if (match.Success) {
string left = match.Groups[1].Value;
string mid = match.Groups[2].Value;
string right = match.Groups[3].Value;
int a = int.Parse(left.Substring(1));
int b = int.Parse(right.Substring(1));
if (a > b || (a == b && left[0] > right[0]))
return right + mid + left;
}
return term;
}
简而言之,如果term
字符串与您描述的模式不匹配,请原样返回。否则,如果右侧小于左侧,则交换订单。
这将遵守分隔符字符串的类型(“-”或“ vs”)。
您可以通过多种方式在集合上使用它。
如果您将对象存储在中List<T>
:
values.ForEach(val => val.Term = SortTerm(val.Term));
如果您有IEnumerable<T>
:
foreach (var value in values)
value.Term = SortTerm(value.Term);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句