创建一个计算特定数字之间距离的新数组

时间:2015-04-14 00:53:36

标签: javascript arrays excel distance

这很容易被误解,所以我会简化它。假设我有一个数组,这是掷骰子的结果。像:

1 2 4 6 1 2 6 6 2 4等

每次投掷6分,你就赢了。我想创建一个新的数组,其中包含基于原始数组获胜的转数。所以上面的数组会创建一个数组:

4 3 1

(获胜需要4个回合,然后是3个,然后是1个)

所以我只想计算6的距离。 (我也可以将骰子结果转换为二进制赢/输)

我如何在Excel中执行此操作? (或javascript,但真的更喜欢excel)

5 个答案:

答案 0 :(得分:1)

创建辅助列(Excel A列)。将1放在Helper柱的第一个单元格(A2)中。跟随公式(在A3中)= IF(B3 = 6,A2 + 1,A2)。将它拖到给定数组的最后一行。

然后创建一个结果列(Excel的C列)。输入公式(在C2中) = IF(ROW() - 1 = MAX(A:A) “”,IF(IF(ROW() - 1 = 1,COUNTIF(A:A,ROW() - 1)+ 1,COUNTIF(A: A,ROW() - 1))= 0 “”,IF(ROW() - 1 = 1,COUNTIF(A:A,ROW() - 1)+ 1,COUNTIF(A:A,ROW() - 1))))

在结果列的第一个单元格中(Excel的C列)。拖动并获得所需的结果。

Hide Helper Column。

注意:阵列数据从单元格B2开始

Excel Screenshot

答案 1 :(得分:0)

如果第一个数组是B1:K1,则可以使用:

创建第二个数组
=IF(B1=6,COLUMN()-SUM(A2:$B2)-1,"")  
在B2中

并复制到西装。

答案 2 :(得分:0)

您需要做的是迭代数组并通过累积到收集器变量来计算空间。您可以在其下面找到刚刚弹出的警告窗口代码。(Javascript)



var array = [1, 2, 4, 6, 1, 2, 6, 6, 2, 4]
var resultArray = []
var i = 0;
var distance = 0;
for (i = 0; i < array.length; i++) {
  distance++;
  if (array[i] == 6) {
    resultArray.push(distance);
    distance = 0;
  }
}

alert(resultArray);
&#13;
&#13;
&#13;

我试图在excel中做。

您可以放置​​一个命令按钮并定义如下的子功能,您将获得预期的结果。有关如何放置命令按钮http://www.excel-easy.com/vba/create-a-macro.html#command-button

的说明
Sub DistanceOf6InString(x As String)
Size = Len(x)
distance = 0
result = ""
Dim i As Integer

For i = 1 To Size
    distance = distance + 1
    If (Mid(x, i, 1) = "6") Then
        result = result & distance
        distance = 0
    End If
Next i

MsgBox result

End Sub



Private Sub CommandButton1_Click()
DistanceOf6InString ("1246126624")
End Sub

答案 3 :(得分:0)

这可能对您有用:

var rollsUntil6 = function(rolls) {
  return rolls.reduce(function(indices, roll, idx) {
    if (roll == 6) {indices.push(idx);} return indices;
  }, [-1]).map(function(val, idx, arr) {
    return val - arr[idx - 1];
  }).slice(1);
};

rollsUntil6([1, 2, 4, 6, 1, 2, 6, 6, 2, 4]); //=> [4, 3, 1]

答案 4 :(得分:0)

您可以重复查找array.indexOf(6,lastmatch)

var array = [1,2,4,6,1,2,6,6,2,4];

var resultArray= [], i, incr= 0;

while((i= array.indexOf(6, incr))!= -1){
    i+= 1;
    resultArray.push(i-incr);
    incr= i;
}

resultArray返回值:(数组)[4,3,1]