我試圖在vb中重新創建遊戲2048,我正在努力弄清楚如何讓數組中的值一起滑動。滑動數組值
我試圖做到這一點在一維數組之前,我與全事情
例如任務自己,如果我有
[0,2,0,4]
我需要弄清楚如何數組我可通過每個數步,檢查是否有一個背後的0,這樣的陣列將成爲
[2,4,0,0]
,但我首先要弄清楚如何檢查後面的號碼所有的值掙扎在陣列中
我現在只是在嘗試左側滑動功能,所以我可以慢慢把事情做完,有沒有人有任何想法我可以實現這一目標?
我試圖在vb中重新創建遊戲2048,我正在努力弄清楚如何讓數組中的值一起滑動。滑動數組值
我試圖做到這一點在一維數組之前,我與全事情
例如任務自己,如果我有
[0,2,0,4]
我需要弄清楚如何數組我可通過每個數步,檢查是否有一個背後的0,這樣的陣列將成爲
[2,4,0,0]
,但我首先要弄清楚如何檢查後面的號碼所有的值掙扎在陣列中
我現在只是在嘗試左側滑動功能,所以我可以慢慢把事情做完,有沒有人有任何想法我可以實現這一目標?
你可以用LINQ做到這一點:
Dim a = {0, 2, 0, 4}
a = a.Where(Function(x) x <> 0).Concat(a.Where(Function(x) x = 0)).ToArray()
Console.WriteLine(String.Join(",", a)) ' outputs 2,4,0,0
第一Where
獲取所有非零元素。 Concat
將結果與(全部爲零的元素)連接起來,從而保持數據的長度,並且.ToArray()
將結果轉換回數組。
這工作出色,謝謝你的優雅解決方案! –
我猜你看到你可以通過交換'<>'和'='來獲得「向右滑動」。 –
我對它使用了數組反轉功能,但你的方式可能要好得多 –
舊經典For Each
哪個循環數組只有一個。
Dim previousRow As Integer() = { 0, 2, 0, 4 }
Dim newRow As Integer() = { 0, 0, 0, 0 }
Dim newRowIndex As Integer = 0
For Each previousValue In previousRow
If previousValue = 0 Then Continue For
newRow(newRowIndex) = previousValue
newRowIndex += 1
Next
將返回{ 2, 4, 0, 0 }
僞代碼:
dim arr1, arr2,
foreach [value in array]
if (value is not 0)
then add to arr1
else add to arr2
concat arr1, arr2
是否需要將陣列保持相同的長度? –
是的,該數組表示遊戲網格上的一行。 –