【问题标题】:Equality evaluation of Char and String variables with identical text具有相同文本的 Char 和 String 变量的相等评估
【发布时间】:2016-05-05 15:19:54
【问题描述】:

我正在从 csv 文件中读取文本条目,并根据存储在数组中的默认值对它们进行测试。在 Matlab 中我使用过isequal(w1,w2);但是,Julia 更严格,isequal 总是报告 false 。在 试图找出原因,我查看了这两个变量的属性。对于 csv 文件中的数据,typeof(w2) 呈现 SubString{ASCIIString}w2[1] 渲染 A; typeof(w2[1]) 渲染 Char;和length(w2) 呈现23。对于默认数组,typeof(w1) 渲染 Array{ASCIIString,1}w1[1] 渲染 APP #2 bias voltage [V];typeof(w1[1]) 渲染 ASCIIString;和length(w1) 呈现1。 所以看起来我一方面有一个 Char 变量,另一方面有一个 String 变量。我查看了文档并在线搜索了来自 Char->String 或 String->Char 的转换函数,但我没有找到。 我是否应该将每个变量中的每个文本字符转换为其 ASCII 等效数字代码,然后评估等效性?或者有没有办法将字符串文本字符填充到 Char 数组中? 任何帮助表示赞赏。

【问题讨论】:

  • map(x -> Char(x[1]) , x) 将从您的 x 向量返回字符。
  • 非常正确,谢谢 - "z1 = map(w1 -> Char(w1[1]), w1)" 结果:"typeof(z1)" 呈现 "Array{Char,1}" ,并且“z1”呈现“1-element Array{Char,1}: 'A'”。但是,“isequal(z1,w2[1])”仍然是“假”。我做错了什么?
  • 我可以使用 isequal(w1,[w2]) 代替我一直使用的 [isequal(w1,w2)]。谢谢。

标签: julia


【解决方案1】:

这个问题其实很简单,和String Char转换没有任何关系。 w1 是ASCIIStringVector,即类似于:

w1 = ["APP #2 bias voltage [V]"]

w2 是一种字符串(只是较大ASCIIString 的子字符串),而不是向量。

您只需要做:w1[1] == w2

注意:当您尝试比较两个东西(如字符串向量和字符串)时,如果 Julia 抛出某种“NotComparableError”可能会很好。

以下是 Julia 的提升规则如何处理不同类型字符串(ASCIIStringUTF16StringUTF32StringSubString{ASCIIString} 之间的比较的示例,就像您从 CSV 解析器返回一样:

julia> wasc = "APP #2 bias voltage [V]"
"APP #2 bias voltage [V]"
julia> w16 = utf16("APP #2 bias voltage [V]")
"APP #2 bias voltage [V]"
julia> w32 = utf32("APP #2 bias voltage [V]")
"APP #2 bias voltage [V]"
julia> wsub = SubString(wasc,1,length(wasc))
"APP #2 bias voltage [V]"
julia> wvec = ["APP #2 bias voltage [V]"]
1-element Array{ASCIIString,1}:
 "APP #2 bias voltage [V]"
julia> wvec == wsub
false
julia> wvec[1] == wsub
true
julia> wvec[1] == w16
true
julia> wvec[1] == w32
true
julia> typeof(w32)
UTF32String

【讨论】:

  • 这太好了,谢谢!!为什么“typeof(w2)”呈现“子字符串”而不仅仅是“字符串”一定是有原因的? --再次感谢。
  • SubString 是参数化类型,用于返回较大字符串的切片,无需复制。与ASCIIStringUTF8StringUTF16StringUTF32String 一样,它是抽象AbstractString 的子类型。还有一些其他子类型(有些可能在 v0.5 中被删除),例如 RevString,它可以有效地返回字符串的反转视图,而无需复制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多