滑动数组值

sliding array values

我正在尝试在 vb 中重新创建游戏 2048,但我正在努力弄清楚如何让数组中的值一起滑动。

在我自己完成全部任务之前,我正在尝试在一维数组中执行此操作

例如,如果我有一个数组

[0,2,0,4]

我需要弄清楚如何遍历每个数字,检查它后面是否有 0,这样数组就会变成

[2,4,0,0]

但我正在努力弄清楚如何检查数组中数字后面的所有值

我目前只是在尝试向左滑动功能,所以我可以慢慢来,有谁知道我该怎么做吗?

老经典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

会 return { 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() 将结果转换回数组。

伪代码:

dim arr1, arr2,

foreach [value in array]
    if ( value is not 0 ) 
    then add to arr1
    else add to arr2

concat arr1, arr2