【问题标题】:sliding array values滑动数组值
【发布时间】:2017-05-16 21:33:23
【问题描述】:

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

在我完成全部任务之前,我试图在一个单维数组中执行此操作

例如,如果我有一个数组

[0,2,0,4]

我需要弄清楚如何逐步遍历每个数字,检查其后面是否有 0,以便数组变为

[2,4,0,0]

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

我目前只是在尝试向左滑动功能,以便我可以慢慢处理,有人知道我该如何实现吗?

【问题讨论】:

  • 数组是否需要保持相同的长度?
  • 是的,该数组代表游戏网格中的一行。

标签: .net arrays vb.net 2048


【解决方案1】:

你可以用 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() 将结果转换回数组。

【讨论】:

  • 效果很好,感谢您提供优雅的解决方案!
  • 我猜你看到你可以通过交换&lt;&gt;=来获得“幻灯片正确”。
  • 我使用了数组反转函数,但你的方法可能要好得多
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    伪代码:

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

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 2021-10-01
      • 2017-09-03
      • 2012-11-09
      • 2016-07-21
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多