2012-03-29 116 views
0

我想將字符串列表重新排列到不同的字符串列表中。我正在創建多個循環來做到這一點,但我想知道是否有更好的方法來做到這一點。將字符串列表重新排列到新列表中

 Dim values As New List(Of String) 

    For Each val As String In vals 

     If val.Contains("10") And val.Contains("Year 1") Then 

      values.Add(val) 

     End If 

    Next 

    For Each val As String In vals 

     If val.Contains("20") And val.Contains("Year 1") Then 

      values.Add(val) 

     End If 

    Next 

有將是相當多的,這些循環的做我想做的任何人都可以提供任何幫助或有更好的方式去這樣做呢?請注意,我希望值列表返回10,10,10,20,20,20,這樣應該首先添加10行,然後再添加20行。

感謝,

斯特凡

+0

家庭作業?如果是這樣,請標記爲這樣。 – DOK 2012-03-29 14:41:42

+0

這是不是像CSV文件分離? – 2012-03-29 15:16:37

回答

0

如果你希望它在今年進行排序,這將工作:

Dim result = (From item In values 
     Where item.ToLower Like "*year #*" 
     Let year = Regex.Match(item.Substring(item.ToLower.IndexOf("year ")), "\d+").Value 
     Order By year).ToList() 

可是你說你希望它由10,20,30進行排序等等。但我不明白這應該如何工作。

  1. 該值可能是8,25,4711而不是如何在字符串中找到它?
  2. Contains只檢查該行是否包含此子字符串,但在年份(f.e。year 10)或其他地方也可能有此編號。

所以你的要求看起來很容易出錯和模糊。

編輯:如果文字是如此嚴格爲您的評論的樣品中,您可以將其簡化爲這一點,分割每行到由逗號分隔的標記:

Dim result = (From item In values 
      Let Tokens = item.Split({","c}, StringSplitOptions.RemoveEmptyEntries) 
      Let Count = Int32.Parse(Tokens(3)) 
      Let Year = Int32.Parse(Regex.Match(Tokens(5), "\d+").Value) 
      Order By Count, Year 
      Select item).ToList() 
+0

COM317,數據庫介紹,2,20,M,第1年,字符串中的20值和這一年是我想要的新列表,所以這 COM317,數據庫介紹,2,10,M,第1年 COM317,數據庫介紹,2,10,M,第1年 COM317,數據庫介紹, 2,20,M,Year 1 COM317,數據庫介紹,2,20,M,Year 1 你可以看到,第一年的10年都是在第一年加入的 – aspiringCoder 2012-03-29 16:07:34

+0

@StefanReaney:編輯我的答案以提供更簡化的版本與您提供的示例數據一起工作。如果數據不是那麼嚴格,無論如何你可能會有想法。 – 2012-03-29 16:34:58

+0

啊,我看到了什麼代碼正在做,它到達那裏,不幸的是我需要多年,所以我想COM317,數據庫介紹,2,10,M,1年.. COM317,數據庫介紹,2, 20,M,1年級和COM317,數據庫介紹,2,10,M,2年級和COM317,數據庫介紹,2,20,M,2年級這是一個簡單的調整嗎? – aspiringCoder 2012-03-29 16:45:19

0
Dim values As List(Of String) = vals.OrderBy(Function(s) 
     If s.Contains("Year 1") Then 
      If s.Contains("10") Then Return 0 
      If s.Contains("20") Then Return 1 
     End If 
     Return Integer.MaxValue 
    End Function).ToList() 

這聽起來像你可能還需要創建這個字符串正則表達式,拔出你所關心的領域。這應該會讓這個表現好很多。爲了幫助您獲得正確的表達式,我們需要更多地瞭解字符串的外觀。

+0

上面的代碼中發生了什麼?對不起,這是相當新的,字符串類型是COM133,數據庫介紹,1,10 .. <---像這樣 – aspiringCoder 2012-03-29 15:03:35