C# 使用.orderby对列表进行排序
简单的问题,真的,我似乎被困在这里了 我试图在列表中拆分一个字符串,并按第一个“tiddilebage”%d和&h排序,但现在这给了我字符串的最后一位,所以是名称,而不是剩下的时间,我想按第一位排序 我怎样才能扭转这一行动C# 使用.orderby对列表进行排序,c#,C#,简单的问题,真的,我似乎被困在这里了 我试图在列表中拆分一个字符串,并按第一个“tiddilebage”%d和&h排序,但现在这给了我字符串的最后一位,所以是名称,而不是剩下的时间,我想按第一位排序 我怎样才能扭转这一行动 string lines = tidtilbage.ToString("%d") + " dag(e)" + " " + tidtilbage.ToString("%h") + " time(r)" + " - " +
string lines = tidtilbage.ToString("%d") + " dag(e)" + " "
+ tidtilbage.ToString("%h") + " time(r)" + " - "
+ p.SamAccountName.ToUpper() + " - " + p.DisplayName + "\n\n";
list_sorted.Add(lines.ToString());
string[] Separator = new string[] { "time(r)" };
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[1]).ToList();
当我尝试将索引更改为0而不是1时,我仍然无法获得所需的排序。我得到:
0 dag(e)20次(r)-xx-xx
1 dag(e)3次(r)-xx-xx
13 dag(e)22时间(r)-xx-xx
3 dag(e)23时间(r)-xx-xx
5 dag(e)21次(r)-xx-xx
5 dag(e)21次(r)-xx-xx
6 dag(e)2次(r)-xx-xx
9 dag(e)1次(r)-xx-xx
9 dag(e)21次(r)-xx-xx之所以发生这种情况,是因为C#集合是基于零索引的换句话说,
集合[1]
是第二项或集合。如果要按第一项排序,需要使用[0]
您只需更改:
.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[1])
到
同时,您的代码还存在一些其他问题:
.ToString()
应用于已为字符串的项目:
list_sorted.Add(lines.ToString()); // incorrect
list_sorted.Add(lines); // correct
string.Format
或C#6.0字符串插值代替+
串联
难以阅读和维护:
string lines = tidtilbage.ToString("%d") + " dag(e)" + " "
+ tidtilbage.ToString("%h") + " time(r)" + " - "
+ p.SamAccountName.ToUpper() + " - " + p.DisplayName + "\n\n";
现在看起来好多了:
string lines = String.Format("{0:D} dag(e) {0:H} time(r) - {1} - {2}\n\n",
tidlitbage, p.SamAccountName.ToUpper(), p.DisplayName);
甚至
string lines = $"{tidlitbage:D} dag(e) {tidlitbage:H} time(r) - {p.SamAccountName.ToUpper()} - {p.DisplayName}\n\n");
换句话说,
集合[1]
是第二项或集合。如果要按第一项排序,需要使用[0]
您只需更改:
.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[1])
到
同时,您的代码还存在一些其他问题:
.ToString()
应用于已为字符串的项目:
list_sorted.Add(lines.ToString()); // incorrect
list_sorted.Add(lines); // correct
string.Format
或C#6.0字符串插值代替+
串联
难以阅读和维护:
string lines = tidtilbage.ToString("%d") + " dag(e)" + " "
+ tidtilbage.ToString("%h") + " time(r)" + " - "
+ p.SamAccountName.ToUpper() + " - " + p.DisplayName + "\n\n";
现在看起来好多了:
string lines = String.Format("{0:D} dag(e) {0:H} time(r) - {1} - {2}\n\n",
tidlitbage, p.SamAccountName.ToUpper(), p.DisplayName);
甚至
string lines = $"{tidlitbage:D} dag(e) {tidlitbage:H} time(r) - {p.SamAccountName.ToUpper()} - {p.DisplayName}\n\n");
我想你是在第二个位置上分拆
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[1]).ToList();
尝试更改[0]的[1]
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[0]).ToList();
或者使用.First(),(使用.Last()您不能使用de Last one),或者.elementAt(X)也很有用。我认为您使用的是拆分返回的第二个位置
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[1]).ToList();
尝试更改[0]的[1]
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[0]).ToList();
或者使用.First(),(使用.Last()您不能使用de Last one),或者.elementAt(X)也很有用。如果我没有错误地理解您的问题,那么您需要的必须是数组[0],而不是[1]。在
split
ur字符串之后,第一个数组将被放入数组[0],而不是[1]
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[0]).ToList();
如果我没有错误地理解您的问题,那么您需要的必须是数组[0],而不是[1]。在
split
ur字符串之后,第一个数组将被放入数组[0],而不是[1]
list_sorted = list_sorted.OrderBy(s => s.Split(Separator, StringSplitOptions.None)[0]).ToList();
谢谢你的回答@Yeldarkurmangaliyev!我仍然没有得到所需的排序。我编辑了我的问题,这样你就能明白我的意思了。:-)我想要最低的=>highest@MathiasRønnowNørtoft因为您对字符串进行排序,所以C#按字典顺序对它们进行排序。您需要先对您的
tidtilebage
集合进行排序(我猜,它是DateTime
),然后将它们转换为字符串列表
。再次感谢,我会尝试的!:-)谢谢你的回答@Yeldarkurmangaliyev!我仍然没有得到所需的排序。我编辑了我的问题,这样你就能明白我的意思了。:-)我想要最低的=>highest@MathiasRønnowNørtoft因为您对字符串进行排序,所以C#按字典顺序对它们进行排序。您需要先对您的tidtilebage
集合进行排序(我猜,它是DateTime
),然后将它们转换为字符串列表
。再次感谢,我会尝试的!:-)