2016-03-04 134 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