我正在尝试将字符串类型列表中的项目与整数进行比较。我试过这样做,但我得到一个错误说:
<div id="forwardCall" class="modal fade" ng-controller="CallCtrl as call">
<div ng-show={{ call.well }}>Some content</div>
</div>
比较的代码行类似于:
'value < is not a member of List[Int]'
除了为什么会发生这种情况之外,我想知道为什么我没有收到错误 当我使用不同类型的比较时,例如'=='。
所以,如果我运行该行:
if(csvList.map(x => x(0).toInt) < someInteger)
我没有收到错误。那是为什么?
答案 0 :(得分:1)
你可以参考 Why == operator and equals() behave differently for values of AnyVal in Scala
每个班级支持运营商==,但可能不支持&lt;,&gt;这些运营商。
代码
csvList.map(x => x(0).toInt)
它返回 List&lt; int&gt; ,并且应用程序使用它来与int进行比较, 所以它可以处理隐式类型转换。甚至编译器也不会将其报告为错误。一般来说,将价值与不同类型进行比较并不好。
答案 1 :(得分:1)
Private Function createCSVBody(ByVal reader As String)
Try
Dim sb As New System.Text.StringBuilder
sb.AppendLine("SELECT * FROM NOULGB WHERE PRINT_NO=@readerno")
sb.AppendLine(New OracleParameter("@readerno", OracleDbType.Char, reader, ParameterDirection.Input).ToString)
Using dar As Oracle.DataAccess.Client.OracleDataReader = Ibr.DataReader(sb.ToString)
While dar.Read()
page_no = dar("PRINT_NO").ToString()
page_no1 = dar("PAGE_NO1").ToString()
End Using
End Function
将整个csvList.map(x => x(0).toInt)
转换为csvList
,然后尝试将操作符List[Int]
应用于<
和List[Int]
存在。这基本上就是错误信息所说的内容。
someInteger
没有错误,因为==
存在此运算符,但List
将始终返回false。
您尝试做的可能是将List[T] == Int
的每个项目与List
进行比较。如果是这种情况,可以这样做:
Int
答案 2 :(得分:1)
这段代码csvList.map(x => x(0).toInt)
实际上返回List[Int]
,与整数无法比较(不确定List(1,2) < 3
是什么意思)。
如果你想将列表中的每个元素与你的数字进行比较,确保它们都不如它,你实际上会写if(csvList.map(x => x.toInt).forall { _ < someInteger })
答案 3 :(得分:1)
在回答问题之前,我们先介绍一些介绍 使用REPL,您可以更加了解自己在做什么
scala> List("1", "2", "3", "33").map(x => x(0).toInt)
res1: List[Int] = List(49, 50, 51, 51)
map函数用于转换每个元素,因此地图中的x第一次为“1”,第二次为“2”,依此类推。
当您使用x(0)时,您正在访问字符串中的第一个字符。
scala> "Hello"(0)
res2: Char = H
如果您在映射字符串后看到类型,则为Int of List。你可以将它与Int进行比较,但它永远不会等于。
scala> List(1, 2, 3) == 5
res0: Boolean = false
当你尝试
时,这与Java非常相似"Hello".equals(new Integer(1));
如果您想了解有关平等问题背后原因的更多信息,可以查看Why has Scala no type-safe equals method?
最后但并非最不重要的一点是,使用少于因为不少于List类时会出现错误。
<强>附加:强> 如果你想知道列表中的第二个元素是否小于2,你可以
scala> val data = List("1", "10", "20")
data: List[String] = List(1, 10, 20)
scala> 5 < data(1).toInt
res2: Boolean = true
虽然有点奇怪,但是你可能应该将字符串列表转换为类似案例类的类型,然后使用更清晰的数据模型来处理业务逻辑。