我有一些不同的单选按钮,可以返回种族和性别.该脚本在内部应用程序内部运行,因此不是返回"boy","girl"或"both",而是返回7707330,7707333和7707336.类似于种族单选按钮.
然后,我需要根据种族和性别的组合验证数据.这是一个非常简单的任务,但我最终得到了15个if语句!一切都按预期工作,但必须有一个更清洁的解决方案?
function test(radioResults) {
var1 = radioResults[0].toString();
var2 = radioResults[1].toString();
var roll = parseFloat(parent.roll);
if (var2 == '7707330') {
gender = 'boy';
}
if (var2 == '7707333') {
gender = 'girl';
}
if (var2 == '7707336') {
gender = 'both';
}
if (var1 == '7707341') {
maori(gender);
}
if (var1 == '7707344') {
pasifika(gender);
}
if (var1 == '7707347') {
all(gender);
}
}
function maori(gender) {
//Maori
if (gender == 'boy') {
ethnicity = parseFloat(parent.getMBoys);
validation(ethnicity);
}
if (gender …Run Code Online (Sandbox Code Playgroud) 给出以下辅助方法.
def link_tags(collection)
tags = collection.split(',')
tags.map.each do |tag|
if tag == tags.last
content_tag(:a, tag, href: tags_filter_post_path(tag) )
else
content_tag(:a, tag, href: tags_filter_post_path(tag) ) + ', '
end
end.reduce(:<<)
end
Run Code Online (Sandbox Code Playgroud)
我怎么能对此做一点重构?
编辑:重构后的最终代码建议.
def link_tags(collection)
collection.split(',').collect do |tag|
link = ""
link += link_to tag, tags_filter_post_path(tag)
end.join(', ').html_safe
end
Run Code Online (Sandbox Code Playgroud) public boolean isPalindrome()
{
Stack myStack = new Stack();
for(Node current = head; current!=null; current = current.next)
{
if(!myStack.isEmpty())
{
if(myStack.peek()==current.data)
{
myStack.pop();
}else if(current.next!=null&&myStack.peek()==current.next.data)
{
continue;
}
else
{
myStack.push(current.data);
}
}else
{
myStack.push(current.data);
}
}
return myStack.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)
我在这里做的是使用堆栈来检查链表是否是回文.它按预期工作只是我想摆脱代码重复,其他条件将数据推送到堆栈.
我的VS2010 C#项目的物理文件名与源代码中的类或接口名称不匹配,但总是让它们具有相同的名称...所以在VS2010 Pro中还是在Resharper中有一种方法我可以说嘿重命名文件名以匹配他们的类或接口名称?
我正在使用.Net Framework 4,mvc 3和实体框架(最新稳定版)
在索引页面上,我希望能够过滤每一列.LINQ使用distinct()方法为每列检索过滤器值.我没有找到一种很好的方法来重用为每列检索这些值的方法 - 它们基本相同,唯一区分它们的是使用的列名,因此使用一种方法而不是几种方法会很好.
public List<string> GetLevels()
{
return _db.Logs.Select(l => l.Level).Distinct().ToList();
}
public List<string> GetOrders()
{
return _db.Logs.Select(l => l.Order).Distinct().ToList();
}
Run Code Online (Sandbox Code Playgroud)
如何使用我想从中检索数据的列名注入lambda表达式?像这样的东西:
public List<string> GetFilterValues(string columName)
{
return _db.Logs.Select(l => l.columnName).Distinct.ToList();
}
Run Code Online (Sandbox Code Playgroud) 我创建了以下内容,但是看起来非常神秘.有没有办法以更Ruby的方式或可理解的方式编写它?
此方法删除数字下方的较低因子.所以,10.high_factors回报[6,7,8,9,10].6可被2整除,因此2被删除.列表中没有大于6的倍数,因此它保持不变.
class Fixnum
def high_factors
# Get the numbers that are not divisible by lower ones below self
list = (2..self).to_a
2.upto(self).each do |i|
((i+1)..self).each { |j| list.delete i if j.is_divisible_by? i }
end
list
end
def is_divisible_by? divisor
self % divisor == 0
end
end
Run Code Online (Sandbox Code Playgroud)
Ruby 1.9.3
我想从richtextbox中的项目创建CSV字符串.我知道必须有一个比我拼凑的更好的方式:
string CSVDuckbills = GetLinesAsCSV(richTextBoxDuckbills.Lines);
...
private string GetLinesAsCSV(string[] DuckbillLines)
{
string DuckbillCSV = string.Empty;
foreach (string item in DuckbillLines)
{
DuckbillCSV += string.Format("{0},", item);
}
return DuckbillCSV;
}
Run Code Online (Sandbox Code Playgroud)
首先,我必须在最后剥掉一个多余的逗号.
我有34种不同的方法,它们使用我的ViewModel类的1个参数,但是每个方法在类上只使用了两个或三个特性.我想我宁愿把这些属性传递给这些方法而不是整个对象.这是一种轻松重构的方法吗?我试图只选择我函数中的所有文本并执行Refactor> Extract Method,希望它足够智能,只能看到对象的2个属性被使用,并使参数列表只是那2个属性,但它只是想再拿整个物体.
也许我需要解释一下我在做什么......
我正在尝试编写一个为wiki页面生成文本的应用程序.根据输入到UI中的值,它将生成模板的文本和使用该模板的文本,或者如果不需要模板,它将只生成页面的文本.它有17个不同的部分,因此有17个功能,当组合时,创建模板页面的文本,并且如果不需要模板,有17个功能组合成实际页面.我是这样做的,所以我可以一次测试它的一小部分,而不是测试一个大型函数的整个输出.
所以目前这些方法中的所有34个都采用1个参数,即从UI构建的整个对象.对我来说,没有任何意义.生成整个页面的1个部分的函数永远不需要知道在不同部分中使用的数据,如果有人试图在那里使用它,那么我就知道出了什么问题.
我有这个代码:
switch (currentLetter)
{
case 'A': return 'B';
case 'B': return 'C';
case 'C': return 'D';
case 'D': return 'E';
case 'E': return 'F';
case 'F': return 'G';
case 'G': return 'H';
case 'a': return 'b';
case 'b': return 'c';
case 'c': return 'd';
case 'd': return 'e';
case 'e': return 'f';
case 'f': return 'g';
case 'g': return 'h';
}
Run Code Online (Sandbox Code Playgroud)
我想到了许多方法来改变它,但我不确定选择哪个.我可以替换所有返回(char)(currentLetter + 1),使用带有ASCII值的if语句来确定范围,然后执行(char)(currentLetter + 1),使用Enumerable.Range.Contains然后查看该值是否在范围内,用if替换开关等.
这段代码不会在其他任何地方重复,我不确定这是不是最好的方法,因为代码的读者对于正在发生的事情非常清楚,他们不必考虑字符代码,算术等.此外,永远不会有任何更多的字符添加到case语句,所以它不会变得笨拙.
不确定我是应该保留原样还是更改它.
我正在玩JS,并有以下代码片段
var Dog = function(name) {
this.name = name
}
Dog.prototype= {
'bark': function() {
alert(this.name + ' is barking');
},
'run': function() {
alert(this.name + ' is running');
}
}
var dogs = [new Dog('first'), new Dog('second'), new Dog('third')];
function invokeOnDog(what) {
if(what === 'bark') {
for(var i=0; i<dogs.length; i++) {
dogs[i].bark();
}
}
if(what === 'run') {
for(var i=0; i<dogs.length; i++) {
dogs[i].run();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是简化这个invokeOnDog功能,因为它重复两次相同的模板.我正在考虑以某种方式返回应该在对象上调用的方法,但不知道如何做到这一点.
你能帮帮我吗?
编辑:
感谢您的快速回复.如果"what"与调用方法具有相同的名称,则它们都可以.但如果这两者之间没有匹配怎么办?
invokeOnDog('aggresive')应该调用bark方法并invokeOnDog('scared')应该调用run
refactoring ×10
c# ×5
javascript ×2
ruby ×2
algorithm ×1
character ×1
code-cleanup ×1
coding-style ×1
csv ×1
if-statement ×1
java ×1
linq-to-sql ×1
readability ×1
richtextbox ×1