怎么让一个数组变成这样
现在数组是:['a','b','c','c','c','d,'d,'d,'d,'d,'d','e','f','g','g','g','g','g','h']
想能过算法变成
['a','b','ccc','dddddd','e','f','ggggg','h']
意思是只要相邻的是一样的都变成一组。@afan 大佬帮帮我,谢谢:face (1):
本帖最后由 怪咖很怪i 于 2024-3-28 20:29 编辑
#include <Array.au3>
Global $arr = ['a','b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'd', 'e', 'f', 'g', 'g', 'g', 'g', 'g', 'h']
Global $result
Global $temp = $arr
For $i = 1 To UBound($arr) - 1
If $arr[$i] = $arr[$i - 1] Then
$temp &= $arr[$i]
Else
_ArrayAdd($result, $temp)
$temp = $arr[$i]
EndIf
Next
_ArrayAdd($result, $temp)
_ArrayDelete($result, 0) ; 删除第一个空元素
_ArrayDisplay($result)
ConsoleWrite("合并后的结果数组:" & _ArrayToString($result, ",") & @CRLF)
#include <String.au3>
#include <array.au3>
Local $aAry
For $i = 0 To UBound($aAry) - 1
$aAry[$i] = Chr(Random(97, 122, 1))
Next
;~ _ArrayDisplay($aAry)
Local $oZD = ObjCreate('Scripting.Dictionary')
For $i = 0 To UBound($aAry) - 1
If Not $oZD.Exists($aAry[$i]) Then
$oZD.add($aAry[$i], 1)
Else
$oZD.item($aAry[$i]) = $oZD.item($aAry[$i]) + 1
EndIf
Next
Local $aAryOut = $oZD.keys
_ArraySort($aAryOut)
;~ _ArrayDisplay($aAryOut)
For $i = 0 To UBound($aAryOut) -1
$aAryOut[$i] = _StringRepeat($aAryOut[$i],$oZD.item($aAryOut[$i]))
Next
_ArrayDisplay($aAryOut)
#include <Array.au3>
Local $arr = ['a', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'd', 'e', 'f', 'g', 'g', 'g', 'g', 'g', 'h']
Local $aNew = _test($arr)
_ArrayDisplay($aNew)
Func _test($arr)
If UBound($arr, 0) <> 1 Then Return SetError(1)
Local $aRt, $sLeft, $iX = -1
For $ii = 0 To UBound($arr) - 1
If $arr[$ii] = $sLeft Then
$aRt[$iX] &= $arr[$ii]
Else
$sLeft = $arr[$ii]
$iX += 1
$aRt[$iX] = $arr[$ii]
EndIf
Next
ReDim $aRt[$iX + 1]
Return $aRt
EndFunc ;==>_test 感谢各位了。。。谢谢 我也凑个热闹
#include <array.au3>
Local $arr = ['a', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'd', 'e', 'f', 'g', 'g', 'g', 'g', 'g', 'h']
Local $out,$temp
For $i = 0 To UBound($arr)-1
If StringCompare($arr[$i],$temp)= 0 Then
$out &= $arr[$i]
Else
$out &=','&$arr[$i]
EndIf
$temp = $arr[$i]
Next
$out = StringSplit(StringTrimLeft($out,1),",",2)
_ArrayDisplay($out)
试着用正则处理,用标志位 $STR_REGEXPARRAYGLOBALMATCH (3) 只能拿到一个字符,用 $STR_REGEXPARRAYGLOBALFULLMATCH (4) 就可以了,如果能直接分割出来就好了
#include <Array.au3>
Local $arr = ['a', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'd', 'e', 'f', 'g', 'g', 'g', 'g', 'g', 'h']
Local $sArr = _ArrayToString($arr, '')
Local $aRet = StringRegExp($sArr, '(.)\1{0,}', 4)
Local $aResult
For $t In $aRet
_ArrayAdd($aResult, _ArrayExtract($t, 0, 0))
Next
_ArrayDisplay($aResult) 谢谢各位大佬。。。。。。。结贴了。。。 精彩精彩
页:
[1]