2014-03-03 49 views
1

我得到了以下的字符串數組VB-2008如何檢索數組中最大數字後綴的字符串?

a.csv 
a-1.csv 
a-2.csv 
a-3.csv 
ab.csv 
ab-1.csv 
ab-2.csv 
cccc.csv 
cccc-1.csv 
d.csv 

在該字符串數組,它存儲了一系列的測試的數據,對於每個測試數據如下命名的轉換,

'unit name'+'-'+('suffix in single digit number')+'.csv'

長度的單位名稱可以是任意長度,但後綴只能是單位數字(1-9)。例如,對於單元a,它總共進行4次測試,其爲a.csv,a-1.csv,a-2.csva-3.csv。但是由於前三次測試都不符合規格,因此只有最後一次測試數據纔會被檢索用於分析,即a-3.csv

所以,對於最終的輸出,我只需要那些有每個單元的最大後綴,這使我的輸出字符串數組數據:

a-3.csv 
ab-2.csv 
cccc-1.csv 
d.csv 

我應該如何從輸入選擇正確的文件字符串數組按照規則得到那些測試數據只得到最大的後綴。

+2

能否請您解釋一下它是什麼,你問? –

+1

@ DanDrews,輸入是一個字符串數組,它們實際上是文件夾中的所有文件名。您可以將它們視爲測試數據列表,a表示產品a,b表示產品b,a-1,a-2是重新測試數據。所以最後我需要得到每個產品的最新測試數據,這些數據是a-3,b-2,c-1,d。 – 2342G456DI8

回答

1
Private Function Suffix(ByVal s As String) As String 
    s = IO.Path.GetFileNameWithoutExtension(s) 
    Dim pos = s.LastIndexOf("-"c) 
    Return If(pos = -1, s, s.Substring(0, pos)) 
End Function 

Private Function Value(ByVal s As String) As Integer 
    s = IO.Path.GetFileNameWithoutExtension(s) 
    Dim pos = s.LastIndexOf("-"c) 
    Return If(pos = -1, 0, Integer.Parse(s.Substring(pos + 1))) 
End Function 
Dim arr() As String = New String() {"a.csv", "a-1.csv", "a-2.csv", "a-3.csv", "ab.csv", "ab-1.csv", "ab-2.csv", "cccc.csv", "cccc-1.csv", "d.csv"} 

Dim largest = arr.GroupBy(Function(s) Suffix(s), StringComparer.OrdinalIgnoreCase) _ 
       .Select(Function(g) g.OrderByDescending(Function(s) Value(s)).First()) 

For Each s In largest 
    Console.WriteLine(s) 
Next 
1

雖然你的問題並不清楚,但我想你想要將最新的事件存儲在一個單獨的數組中。這裏是你如何能做到這一點:

Dim arrayInput As List(Of String) = New List(Of String) 
    arrayInput.Add("a.csv") 
    arrayInput.Add("a-1.csv") 
    arrayInput.Add("a-2.csv") 
    arrayInput.Add("a-3.csv") 
    arrayInput.Add("b.csv") 
    arrayInput.Add("b-1.csv") 
    arrayInput.Add("b-2.csv") 
    arrayInput.Add("c.csv") 
    arrayInput.Add("c-1.csv") 
    arrayInput.Add("d.csv") 

    Dim arrayOutput As List(Of String) = New List(Of String) 

    Dim strTemp As String = arrayInput(0) 
    Dim startingChar As String = strTemp.Substring(0, 1) 

    For Each item As String In arrayInput 
     If Not startingChar.Equals(item.Substring(0, 1), StringComparison.OrdinalIgnoreCase) Then 
      arrayOutput.Add(strTemp) 
      startingChar = item.Substring(0, 1) 
     End If 
     strTemp = item 
    Next 
    arrayOutput.Add(strTemp) 

你有arrayOutput所需的結果。讓我知道你是否想要別的東西。

+0

非常感謝,@ AhmedSalmanTahir,你幾乎明白我的意思。我運行了你的代碼,它確實有效。但一個問題是,對於最終輸出,我只需要後綴最大的字符串,例如輸入a-1,a-2,a-3。輸出將是a-3(因爲3> 2> 1)。但是你的代碼是獲得最新的事件。對不起,我沒有說清楚。 – 2342G456DI8

+0

如果在應用我的邏輯之前按升序對數組進行排序會怎樣?難道不是說後綴最高的那個總是在最後? –

+0

是的,但問題是我不知道如何排序..還有一件事是我的字符串並不總是以一個字符開始,在我的例子中我使用'a','b',' c','d'。但它也可能是'aa','aaa'。 – 2342G456DI8

相關問題