首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的关联数组的键是对字符串的引用,而不是字符串本身?

为什么我的关联数组的键是对字符串的引用,而不是字符串本身?
EN

Stack Overflow用户
提问于 2020-02-04 07:55:15
回答 2查看 150关注 0票数 0

我有以下包含产品条形码的字符串:

代码语言:javascript
复制
4016241030924;4016241030924;8710624237479;5900951254741;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710624296933;8710624296872;8710624223885;8710624223885;8711000341001;8711000341001;8711000341001;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260453;

我想做的是:

  1. ;拆分字符串
  2. 创建一个相联阵列,其中key是条形码,value是条形码的计数
  3. 循环通过关联数组并打印key (=条形码)和value (= count)

以下是我所尝试的:

代码语言:javascript
复制
BarcodesAssArray := Array()
BarcodeArray := StrSplit(fileContent, ";")
Loop % BarcodeArray.MaxIndex() - 1 {
    thisBarcode := BarcodeArray[a_index]

    ; Check if barcode already exists
    if (BarcodesAssArray[thisBarcode]) {
        BarcodesAssArray[thisBarcode] := BarcodesAssArray[thisBarcode] + 1
    } else {
        BarcodesAssArray[thisBarcode] := 1
    }
}

For key, value in BarcodesAssArray
    MsgBox, %key% = %value%

但关键不是条形码,而是对条形码的某种引用。我得到的是:

代码语言:javascript
复制
-333809963 = 1
204486651 = 8
430547597 = 2
430561191 = 1
430584127 = 9
43084165 = 1
...

我希望得到的是:

代码语言:javascript
复制
4016241030924 = 2
8710624237479 = 1
8710398162939 = 8
...

我该怎么做才好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-06 06:51:49

“您的问题可能是因为数组中的键被视为数字键。数字键的大小有限制,这取决于您使用的是32位AutoHotkey还是64位。我解决这个问题的方法是在数组中的键中添加一个常量的alpha值,并在显示等键时去掉它。这也处理了这样的情况:否则前导零就会从数字键中被删除。”

TAC109 - https://www.autohotkey.com/boards/viewtopic.php?p=312566#p312566

代码语言:javascript
复制
BarcodesString := "4016241030924;4016241030924;8710624237479;5900951254741;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710398162939;8710624296933;8710624296872;8710624223885;8710624223885;8711000341001;8711000341001;8711000341001;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260415;8710624260453;"

BarcodesString := RTrim(BarcodesString,";")    ; remove trailing ;

BarcodesAssArray := {}

Loop, Parse, BarcodesString, `;
    switch BarcodesAssArray.HasKey(A_LoopField . "")
    {
        case true:BarcodesAssArray[A_LoopField . ""] += 1
        case false:BarcodesAssArray[A_LoopField . ""] := 1
    }

For key, value in BarcodesAssArray
    MsgBox, %key% = %value%

Xtra - https://www.autohotkey.com/boards/viewtopic.php?p=312565#p312565

票数 0
EN

Stack Overflow用户

发布于 2020-02-05 20:11:31

试着简化代码,并一步一步地进行。

4016241030924;4016241030924;8710624237479;5900951254741;8710398162939 BarcodesAssArray := BarcodeArray := StrSplit(BarcodesAssArray,";")

MsgBox BarcodeArray(1) BarcodeArray(2) BarcodeArray(3) BarcodeArray(4) BarcodeArray(5)

这至少可以让您通过StrSplit语句,知道您有一个有效的数组。

我已经有一段时间没有编码了,所以冒着您自己的风险吧:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60052856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档