2016-03-04 83 views
0

答案这里是一个开始 Rearrange a list based on given order in c#C#重新排序列表<string>基于另一个列表<string>

但是,我想通过一个字符串列表命令。

我更新了我的小提琴(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]); 
} 

因为我可能不在命令列表中的项目,在那里他们将被安置在新的列表水库?

+1

你不应该用答案或解决方案更新你的问题。如果现有答案不充分,您可以根据需要添加自己的答案。 – crashmstr

回答

2

你可以选择该项目的索引,通过它扔进一个匿名对象顺序,然后再次选择字符串:

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) 
       ); 
+0

当我检查订单时,它确实显示了一开始就不在列表中的订单。我如何将它们移动到最后? – MB34

+0

请参阅上面的更新以获取最终解决方案。我不得不使用2个对象并循环来添加那些不是按顺序的对象。 – MB34

+0

@ MB34更新了我的答案,将未找到的答案添加到列表的后面 – konkked