C# 基于另一个 List对列表<字符串重新排序>
本文关键字:新排序 排序 字符串 另一个 List string 列表 | 更新日期: 2023-09-27 18:37:22
这里的答案是一个开始在 c# 中根据给定顺序重新排列列表
但是,我想按字符串列表排序。
我更新了我的小提琴(https://dotnetfiddle.net/dWuh8l)来尝试这个,但没有运气:
public class kw
{
public string fkp_keyword { get; set; }
}
public static void Main()
{
string url = "http://survey.scic.com/Survey/api/DocColumns";
string parms = String.Concat(url, "/1158341");
List<kw> kws;
using (WebClient client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string result = client.DownloadString(parms);
string unescapedJson = JsonConvert.DeserializeObject<string>(result);
kws = JsonConvert.DeserializeObject<List<kw>>(unescapedJson);
}
var order = new List<string> { "FILENAME", "DOC_NAME", "PRINT_DATE", "EVENT_CODE", "CE_STATE", "DESIGNATION", "PROGRAM_CODE", "DISTRIBUTION", "COURSE NAME", "RECEIPT_DATE", "REC_RID" };
var res = order.Select(i => kws.FindIndex(s => s.Equals(order.IndexOf((i))))).ToList();
Console.WriteLine(res[1]);
}
由于我可能有不在订单列表中的项目,它们将放置在新列表中的什么位置?
您可以选择项目的索引,将其按匿名对象顺序放入,然后再次选择字符串:
var res = kws
.Select(a=>new{orderOf=order.IndexOf(a.fkp_keyword),val=a})
.OrderBy(a=>a.orderOf)
.Select(a=>a.val)
.ToList();
如果您有不在订购列表中的项目,那么它们将被放在前面,因为IndexOf
方法将返回 -1。
您也可以轻松地过滤掉它们,只需使用 where 子句检查 -1
即可 var res = kws
.Select(a=>new{orderOf=order.IndexOf(a.fkp_keyword),val=a})
.OrderBy(a=>a.orderOf)
.Where(a=>a.orderOf!=-1)
.Select(a=>a.val)
.ToList();
如果要将它们添加到列表的末尾,则可以分解列表中的列表和不在列表中的列表,并将它们连接起来,而不是使用列表。
var temp = kws
.Select(a=>new{orderOf=order.IndexOf(a.fkp_keyword),val=a})
.OrderBy(a=>a.orderOf);
var res = temp
.Where(a=>a.orderOf != -1)
.Select(a=>a.val)
.Concat(
temp.Where(a=>a.orderOf==-1).Select(a=>a.val)
);