我为Project Euler编写了以下方法- 问题36.它所做的就是将基数10和基数2中所有小于1,000,000的数字加起来作为回文.
def problem_36
(1...1_000_000).select do |n|
n.to_s == n.to_s.reverse && n.to_s(2) == n.to_s(2).reverse
end
end
Run Code Online (Sandbox Code Playgroud)
现在,这可以工作,并在1秒钟内给出正确的结果.我希望在1秒内得到它,所以我决定减少将数字转换为字符串的次数.所以我做了以下更改:
def problem_36
(1...1_000_000).select do |n|
base10 = n.to_s
base2 = n.to_s(2)
base10 == base10.reverse && base2 == base2.reverse
end
end
Run Code Online (Sandbox Code Playgroud)
问题是,这个版本实际上比原版慢了约50%.所以问题是:分配这两个变量真的很慢吗?或者是Ruby优化链式方法调用?
我正在尝试为使用Caliburn.Micro和White的WPF应用程序编写一些UI自动化测试.我使用CM的内置约定将我的控件绑定到视图模型的属性和方法.我也在使用Conductor
类,这样我可以在一个屏幕上看到多个视图.这通常意味着屏幕上的多个控件最终可能具有相同的x:Name
值.它将被绑定到不同的视图模型.在CM附带的HelloScreens示例应用程序中可以看到我想要做的好事.
我遇到的问题是我将拥有多个具有相同x:Name
属性的XAML元素,以便CM可以为我处理所有绑定工作.遗憾的是,这意味着多个UIItem
对象将具有相同的UI自动化ID.例如,我发现获得不同TextBlock
元素的唯一方法x:Name="DisplayName"
是进行如下调用:
SearchCriteria criteria = SearchCriteria.ByAutomationId("DisplayName").AndIndex(1);
WPFLabel label = myWindow.Get<WPFLabel>(criteria);
Run Code Online (Sandbox Code Playgroud)
这意味着我的测试需要知道屏幕上放置不同控件的确切顺序,这看起来非常脆弱.通过添加另一个视图模型,我可以看到我的测试全部破坏.
x:Name
属性之外,有没有办法指定自动化ID ?x:Name
值并手动绑定它们?更新
通过一次看到多个视图来澄清我的意思,这是我的总体布局.我有我的ShellViewModel
,我从派生Conductor<IScreen>.Collection.OneActive
.然后我的视图ItemsControl
绑定到shell视图模型的Items
属性.每个项目模板都会显示一个按钮,用于将特定内容加载IScreen
到ContentControl
shell视图中.所以,如果我试图寻找一个元素x:Name="DisplayName"
,我在shell视图上有标签,按钮上的ItemsControl
标签以及内部的标签ContentControl
.